码迷,mamicode.com
首页 > 其他好文 > 详细

10608 - Friends

时间:2014-07-27 22:01:29      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

   题目来源:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1549

   并查集,求出每个friends集合,然后再计算每个集合friends个数,求出最大个数。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 const int maxn=30000+5;
 5 int b[maxn],num[maxn];
 6 void init(int n)
 7 {
 8     for(int i=1;i<=n;i++)
 9          b[i]=i;
10 }
11 int find_father(int x)
12 {
13     while(b[x]!=x){
14         x=b[x];
15     }
16     return x;
17 }
18 void fri_union(int friA,int friB)
19 {
20     while(b[friA]!=friA){
21         friA=b[friA];
22     }
23     while(b[friB]!=friB){
24         friB=b[friB];
25     }
26     if(friB!=friA)
27         b[friB]=friA;
28 }
29 int main()
30 {
31     int t;
32     scanf("%d",&t);
33     while(t--){
34         int n,m,friA,friB;
35         scanf("%d%d",&n,&m);
36         init(n);
37         memset(num,0,sizeof(num));
38         for(int i=1;i<=m;i++){
39             scanf("%d%d",&friA,&friB);
40             fri_union(friA,friB);
41         }
42         for(int i=1;i<=n;i++){
43             int father=find_father(i);
44             num[father]++;
45         }
46         std::sort(num,num+n);
47         printf("%d\n",num[n-1]);
48     }
49     return 0;
50 }

 

10608 - Friends

标签:

原文地址:http://www.cnblogs.com/BMESwimming/p/3871270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!