http://acm.hdu.edu.cn/showproblem.php?pid=1856
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others)
Total Submission(s): 29843 Accepted Submission(s): 10605
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<map> 7 using namespace std; 8 #define pii pair<int,int> 9 #define inf 0x3f3f3f3f 10 int f[100005],tot[100005]; 11 int getf(int v){return f[v]==v?v:f[v]=getf(f[v]);} 12 map<int,int>M; 13 int main() 14 { 15 int N,i,j,k; 16 while(scanf("%d",&N)==1){memset(tot,0,sizeof(tot)); 17 if(N==0){puts("1");continue;} 18 M.clear(); 19 int p=0,ans=0,u,v; 20 for(i=1;i<=100000;++i)f[i]=i; 21 for(i=1;i<=N;++i) 22 { 23 scanf("%d%d",&u,&v); 24 int _u=M[u]; 25 int _v=M[v]; 26 if(!_u){M[u]=++p;_u=p;} 27 if(!_v){M[v]=++p;_v=p;} 28 int fu=getf(_u); 29 int fv=getf(_v); 30 if(fu!=fv){ 31 f[fv]=fu; 32 } 33 } 34 for(i=1;i<=p;++i) tot[getf(i)]++; 35 for(i=1;i<=p;++i) ans=max(ans,tot[i]); 36 printf("%d\n",ans); 37 } 38 return 0; 39 }
原文:http://www.cnblogs.com/zzqc/p/7609071.html