并查集 求最大的集合里元素个数
貌似方法有很多。。
#include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <map> #define inf 0x3f3f3f3f #define ll __int64 using namespace std; int r[10000005],vis[10000005],ans; int root(int a) { if(r[a]==a) return a; else return r[a]=root(r[a]); } void merge(int a,int b) { int ra,rb; ra=root(a); rb=root(b); if(ra==rb) return; if(ra<rb) { r[rb]=ra; vis[ra]+=vis[rb]; ans=max(ans,vis[ra]); } else { r[ra]=rb; vis[rb]+=vis[ra]; ans=max(ans,vis[rb]); } } int main() { int n,i,a,b,m; while(~scanf("%d",&n)) { if(n==0) { printf("1\n"); continue; } for(i=0;i<10000005;i++) { vis[i]=1; r[i]=i; } ans=1; for(i=0;i<n;i++) { scanf("%d%d",&a,&b); merge(a,b); } printf("%d\n",ans); } return 0; }
hdu 1856 More is better --- 并查集,布布扣,bubuko.com
hdu 1856 More is better --- 并查集
原文:http://blog.csdn.net/u011032846/article/details/20476931