Fork me on GitHub

HDU1213-How Many Tables

继续刷邝斌飞并查集专题

HDU

读完立马上手写

这题妥妥签到题啊

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 }

 

 

###:并查集的代码简单,但蕴含的思想真的是挺玄妙,理解他花了我好久好久好久

posted @ 2024-11-11 17:50  GerJCS  阅读(2)  评论(0编辑  收藏  举报