题意:给定朋友关系,是朋友的坐一个桌子,问需要多少桌子
题解:并查集处理后看有多少组即可。
1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 using namespace std;
5 int father[1001];
6 int getfather(int x)
7 {
8 if(father[x]==x)
9 {
10 return x;
11 }
12 father[x]=getfather(father[x]);
13 return father[x];
14 }
15 void merge(int x,int y)
16 {
17 x=getfather(x);
18 y=getfather(y);
19 if(x!=y)
20 {
21 father[x]=y;
22 }
23 return;
24 }
25 bool res[1001];
26 int main()
27 {
28 int T;
29 scanf("%d",&T);
30 for(int t=1;t<=T;t++)
31 {
32 int n,m;
33 scanf("%d%d",&n,&m);
34 for(int i=1;i<=n;i++)
35 {
36 father[i]=i;
37 res[i]=false;
38 }
39 for(int i=1;i<=m;i++)
40 {
41 int x,y;
42 scanf("%d%d",&x,&y);
43 merge(x,y);
44 }
45 int count=0;
46 for(int i=1;i<=n;i++)
47 {
48 res[getfather(i)]=true;
49 }
50 for(int i=1;i<=n;i++)
51 {
52 if(res[i])
53 {
54 count+=1;
55 }
56 }
57 printf("%d\n",count);
58 }
59 return 0;
60 }