题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1856
题意就是有n对朋友,最终求最大的朋友圈的人数;所以要用并查集;
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<math.h> #define N 10000010 using namespace std; int f[N],vis[N];///vis[i]代表以i为跟节点的有多少朋友; int Find(int x) { if(x!=f[x]) f[x]=Find(f[x]); return f[x]; } int main() { int n, x, y, i, px, py, Max, Max0; while(scanf("%d",&n)!=EOF) { if(n==0) { printf("1 "); continue; } Max=Max0=0; for(i=0;i<=N;i++) { f[i]=i; vis[i]=1; } for(i=0;i<n;i++) { scanf("%d%d",&x,&y); Max0=max(Max0,max(x,y)); px=Find(x); py=Find(y); if(px!=py) { f[px]=py; vis[py]+=vis[px];///把px的vis并到py上; } } for(i=0;i<=Max0;i++) { if(Max<vis[i]) Max=vis[i]; } printf("%d ",Max); } return 0; }