HDOJ 1856

 1 #include<cstdio>
 2 #include<cstdlib>
 3 typedef struct ufse *ufset;
 4 struct ufse
 5 {
 6     int parent[1000001];
 7     int root[1000001];
 8 }UFS;
 9 int max;
10 int find(int e,ufset u)
11 {
12     if(e!=u->parent[e])
13         u->parent[e]=find(u->parent[e],u);//递归缩短路径
14     return u->parent[e];
15 }
16 void ufnion(int i,int j,ufset u)
17 {
18     if(i!=j)
19     {
20         u->parent[i]=j;
21         u->root[j]+=u->root[i];
22         if(u->root[j]>max)
23             max=u->root[j];
24     }
25 }
26 
27 int main()
28 {
29     ufset u;
30     int i;
31     u=(ufset)malloc(sizeof(UFS));
32     
33     int n,a,b;
34     while(scanf("%d",&n)!=EOF)
35     {
36         for(i=1;i<=1000000;i++)
37             u->parent[i]=i,
38             u->root[i]=1;
39         max=1;
40         for(i=0;i<n;i++)
41         {
42             scanf("%d %d",&a,&b);
43             ufnion(find(a,u),find(b,u),u);
44         }
45         printf("%d
",max);
46     }
47     return 0;
48 }
View Code

用到递归缩短路径!并查集新思路!

原文地址:https://www.cnblogs.com/zeze/p/hdoj1856.html