原题:http://acm.tju.edu.cn/toj/showp2469.html
题意:有n个人,m对朋友关系,朋友之间关系对称且可传递, 问有几个朋友圈。
并查集水过,直接看代码吧 ^o^~~
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
int n, m;
int fa[110];
int vis[110];
using namespace std;
int find(int x)
{
if(x!=fa[x])
fa[x] = find(fa[x]);
return fa[x];
}
void Union(int x, int y)
{
int px = find(x);
int py = find(y);
fa[px] = py;
}
int main()
{
int cas;
scanf("%d", &cas);
while(cas--)
{
int con = 0;
memset(vis, 0, sizeof(vis));
scanf("%d%d", &n, &m);
for(int i = 1;i<=n;i++)
fa[i] = i;
for(int i = 1;i<=m;i++)
{
int x, y;
scanf("%d%d", &x, &y);
Union(x, y);
}
for(int i = 1;i<=n;i++)
fa[i] = find(i);
for(int i = 1;i<=n;i++)
{
if(vis[fa[i]])
continue;
con++;
vis[fa[i]] = 1;
}
printf("%d\n", con);
}
return 0;
}