题目大意:
对于一些黑帮成员,你知道他们某些人不是一个团伙的,并以此判断另外一些人是否属于同一团伙。
思路:
并查集。难点在于对两个节点是否属于同一集合的判断。
代码:
#include
#include
using namespace std;
int n,m,f[100001];
//f[i]表示节点i的父节点。
bool same[100001];
//same[i]=true表示节点i与其父节点属于同一集合。
void init()
//初始化
{
for(int i=1;i0;t--)
{
scanf("%d%d",&n,&m);
init();
for(int i=0;i<m;i++)
{
char op;
int a,b;
scanf("\n%c%d%d",&op,&a,&b);
if(op=='A')
if(find(a)!=find(b))
printf("Not sure yet.\n");
else if(same[a]==same[b])
printf("In the same gang.\n");
else
printf("In different gangs.\n");
else
union_set(a,b);
}
}
}
背景好看
主题不错哦