Time Limit: 5000/1000 MS
(Java/Others) Memory Limit: 327680/102400 K
(Java/Others)
Total Submission(s): 12171 Accepted
Submission(s): 4481
1 //234MS 1876K 845 B G++ 2 /* 3 4 题意: 5 给出n对朋友关系,求直接或间接认识的最大的集合 6 7 并查集: 8 这题出的是什么数据.. 9 个人觉得数据不是很好,想我的做法应该MLE才对,加上map来做 10 应该会更好。不过还是简单题 11 12 */ 13 #include<iostream> 14 using namespace std; 15 int set[200005]; 16 inline int find(int x) 17 { 18 if(x==set[x]) return x; 19 return find(set[x]); 20 } 21 inline void merge(int a,int b) 22 { 23 int x=find(a); 24 int y=find(b); 25 if(x>y) set[x]=y; 26 else set[y]=x; 27 } 28 int main(void) 29 { 30 int n,a,b; 31 while(scanf("%d",&n)!=EOF) 32 { 33 int m=0; 34 for(int i=0;i<200005;i++) set[i]=i; 35 for(int i=0;i<n;i++){ 36 scanf("%d %d",&a,&b); 37 merge(a,b); 38 m=a>m?a:m; 39 m=b>m?b:m; 40 //printf("*%d %d\n",M[a],M[b]); 41 } 42 int s[200005]={0}; 43 int ans=1; 44 for(int i=1;i<=m;i++){ 45 int t=find(i); 46 s[t]++; 47 if(s[t]>ans) ans=s[t]; 48 } 49 printf("%d\n",ans); 50 } 51 return 0; 52 }
hdu 1856 More is better (并查集),布布扣,bubuko.com
原文:http://www.cnblogs.com/GO-NO-1/p/3617808.html