题解:用并查集将所有的朋友合并,最后记录最大的连通块即可:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 |
#include <cstdio>int f[10000010],max,sum[10000010],cnt;int sf(int
x){ if(f[x]!=x)f[x]=sf(f[x]); return
f[x];}int main(){ int
n,x,y; while(scanf("%d",&n)!=EOF){ if(n==0){puts("1");continue;} for(int
i=1;i<10000010;i++){f[i]=i;sum[i]=0;} cnt=0; for(int
i=0;i<n;i++){ scanf("%d%d",&x,&y); f[sf(x)]=sf(y); x=x>y?x:y; cnt=x>cnt?x:cnt; } max=0; for(int
i=1;i<=cnt;i++) if
((++sum[sf(i)])>max) max=sum[f[i]]; printf("%d\n",max); } return
0;} |
原文:http://www.cnblogs.com/forever97/p/3550447.html