输入的时候,两个人竟然不是一伙,而且恰恰相反
开始把我看得好蒙,不是一伙的怎么并
没法并怎么查;
还是看了大牛的博客,原来就是加一个bool类型的判断数组就解决了
还是运用的不灵活,还是刷的题太少了,努力刷题ing
code:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<string>
#include <set>
using namespace std;
#define ll long long
#define mem(a) memset(a,0,sizeof(a))
const int eps=1e-8;
const int maxn=100010;//须填写
const int inf=0x3f3f3f3f;
int f[maxn];
bool sex[maxn];
int find(int x,bool &se)//返回祖先和与祖先的关系
{
se=true;
int r=x;
while(x!=f[x])
{
if(sex[x]==false)//判断关系
se=!se;
x=f[x];
}
//状态压缩,应该还有更优化的,但是这样就能过,懒癌犯了,不想继续优化了
f[r]=x;
sex[r]=se;
return x;
}
int main()
{
int t,i,n,m,a,b,cnt=1;
scanf("%d",&t);
char str[3];
while (t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
f[i]=i;
sex[i]=true;
}
while(m--)
{
scanf("%s%d%d",str,&a,&b);
bool l1=0,l2=0;
int fa=find(a,l1),fb=find(b,l2);
if(str[0]=='D')
{
f[fa]=fb;
sex[fa]=l1^l2;
}
else
{
if(fa==fb)
{
if(l1==l2)
printf("In the same gang.\n");
else
printf("In different gangs.\n");
}
else
printf("Not sure yet.\n");
}
}
}
return 0;
}