标签:mod nio equals 版本 als 版本号 oom more imm
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1856
4 1 2 3 4 5 6 1 6 4 1 2 3 4 5 6 7 8
4 2HintA and B are friends(direct or indirect), B and C are friends(direct or indirect), then A and C are also friends(indirect). In the first sample {1,2,5,6} is the result. In the second sample {1,2},{3,4},{5,6},{7,8} are four kinds of answers.
一定要细致看题目啊!
!!
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others)
时间限制尽管在1s 可是内存放的非常宽啊!
。 所以什么数组存不下等等的顾虑都抛开吧,大胆的开数组!
【代码】
#include <cstdio> const int maxn= 10000000+10; int father[maxn]; int num[maxn]; int Find(int x){ //路径压缩迭代版本号 int root = x; while(root!=father[root]) root = father[root];//肇东根节点 while(x!=root){ //将这棵树上的节点都指向根节点 int tmp = father[x]; father[x] = root; x= tmp; } return root; } void Union(int a,int b){ int p=Find(a); int q=Find(b); if(p!=q){ father[p]=q; num[q]+=num[p]; //将合并后的数量加到 父节点上 } } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0){ puts("1");continue; } for(int i=1;i<=maxn;i++){ num[i]=1; father[i]=i; } int a,b; int Max=0; for(int i=0;i<n;i++){ scanf("%d%d",&a,&b); if(a>Max) Max=a; if(b>Max) Max=b; Union(a,b); } //printf("sd"); int max=0; for(int i=1;i<=Max;i++){ if(num[i]>max) max=num[i]; // printf("bug\n"); } printf("%d\n",max); } return 0; }
标签:mod nio equals 版本 als 版本号 oom more imm
原文地址:http://www.cnblogs.com/yxysuanfa/p/7219736.html