HDU1213-How Many Tables
继续刷邝斌飞并查集专题
读完立马上手写
这题妥妥签到题啊
AC代码
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define MAX 1001 6 int T; 7 int N,M; 8 int node[MAX];//记录根 9 void init() 10 { 11 for(int i=1;i<=N;i++) 12 node[i]=i; 13 } 14 int find(int x) 15 { 16 if(x==node[x]) 17 return x; 18 node[x]=find(node[x]); 19 return node[x]; 20 } 21 int num[MAX]; 22 int main() 23 { 24 while(cin>>T){ 25 while(T--){ 26 cin>>N>>M; 27 init(); 28 for(int i=1;i<=M;i++){ 29 int a,b; 30 cin>>a>>b; 31 int root1=find(a); 32 int root2=find(b); 33 node[root1]=root2; 34 } 35 int ans=0; 36 memset(num,0,sizeof(num)); 37 for(int i=1;i<=N;i++){ 38 int root=find(i); 39 if(num[root]==0) 40 ans++; 41 num[root]=1; 42 } 43 cout<<ans<<endl; 44 // cout<<endl; 45 } 46 } 47 }
###:并查集的代码简单,但蕴含的思想真的是挺玄妙,理解他花了我好久好久好久