题意:给定朋友关系,是朋友的坐一个桌子,问需要多少桌子
题解:并查集处理后看有多少组即可。
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 }
本文介绍了一个使用并查集算法处理朋友关系,以确定最少所需桌子数量的问题解决方案。通过并查集合并有直接关系的朋友,最终统计独立集合的数量即为所需桌子数。

418

被折叠的 条评论
为什么被折叠?



