POJ1611-The Suspects
继续刷邝斌飞并查集专题
感觉并查集没啥可出的题了
但题目我搞不懂为啥第二组数据输出1啊?也没有0啊,看了一堆题解才明白md,0本身就在学生堆里,不用非得在输入数据里艹
一次AC
AC代码
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #define MAX 30000 5 int pre[MAX]; 6 using namespace std; 7 int c[MAX]; 8 int n,m; 9 int find(int x) 10 { 11 if(x==pre[x]) 12 return x; 13 pre[x]=find(pre[x]); 14 return pre[x]; 15 } 16 void union_find(int a,int b) 17 { 18 int root1=find(a); 19 int root2=find(b); 20 pre[root1]=root2; 21 } 22 void init() 23 { 24 for(int i=0;i<n;i++) 25 pre[i]=i; 26 } 27 int main() 28 { 29 while(cin>>n>>m&&(n+m)){ 30 init(); 31 for(int i=0;i<m;i++){ 32 int group; 33 cin>>group; 34 for(int i=0;i<group;i++){ 35 cin>>c[i]; 36 if(i==0) 37 continue; 38 union_find(c[i],c[0]);//每个团体都以第一个人为根,后面所有人都把根指向第一个人,最后只需要把0的根找出来存到变量里,把所有数的根和这个变量里的是一样的就ans++ 39 } 40 } 41 int ans=0; 42 int root_zero=find(0); 43 for(int i=0;i<n;i++){ 44 int root=find(i); 45 if(root==root_zero) 46 ans++; 47 } 48 cout<<ans<<endl; 49 } 50 }
###:在线PS
###:好像看到了公众号真正的算法大佬“夜深人静写算法”的博主
###:我是看了可用平台里有百炼名字,用了许久前几天才知道是POJ团队的第二个oj平台,但为啥说百炼都是poj??但可用平台又没啥人知道,所以百炼是北大poj的某个内部黑话?哦百度“百练是北京大学ACM训练和相关程序课程在线考试系统”