题目大意:a认识b,b认识c,他们三个相互认识,为一组,依次给你一张数据表关于所有人的关系表
解题思路:找相同类的结构,并查集的解题思路,poj食物链的一种情况,并查集入门
AC代码如下:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define Max_N 2000
int book[Max_N];
void init(int n)
{
int i;
for(i=1;i<=n;i++)
book[i]=i;
}
int fine(int x)
{
if(book[x]==x)
return x;
book[x]=fine(book[x]);
return book[x];
}
void cat(int x,int y)
{
int a,b;
a=fine(x);
b=fine(y);
if(a!=b)
book[b]=a;
}
int main()
{
int i,j,k,n,m,t,cnt;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
init(n);
cnt=0;
for(i=0;i<m;i++)
{
scanf("%d%d",&j,&k);
cat(j,k);
}
for(i=1;i<=n;i++)
if(book[i]==i)
cnt++;
printf("%d\n",cnt);
}
return 0;
}
看评论区有人用dfs