http://poj.org/problem?id=1838
题意:有一个直角坐标系,相邻的点可以相连成一块,而且可以将k块相连,求最多有几个点可以连成一块。
思路:先并查集,再排序即可
#include#include #include #include #include #include #include #define mem(a,b) memset(a,b,sizeof(a))#define ll __int64#define MAXN 16000#define INF 0x7ffffff#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;struct Point{ int x,y; int id;};Point p[16000+10];int fa[16000+10];int num[16000+10];int cnt[16000+10];int n;int cmpx(Point a,Point b){ if(a.x!=b.x) return a.x >n>>m) { for(i=1;i<=n;i++) { cnt[i]=1; fa[i]=p[i].id=i; scanf("%d%d",&p[i].x,&p[i].y); } sort(p+1,p+n+1,cmpx); for(i=1;i