poj的1703,一道并查集的题。
http://poj.org/problem?id=1703
实在想不出哪里会造成超内存。。求教。。
以下是代码
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
const int N=100005;
char ch[2];
int fa[N];
int r[N];//0表示和父亲是同伙,1表示不是
int find(int x)
{
if(fa[x]!=x)
{
int root = find(fa[x]);
r[x] = (r[x]+r[fa[x]])%2;
fa[x] = root;
}
return fa[x];
}
void Combine(int a, int b)
{
int rootb = find(b);
fa[rootb] = b;
r[rootb] = r[b];//rootb和b的关系可逆
fa[b] = a;
r[b] = 1;//a和b是敌人
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
fa[i] = i;
r[i] = 0;
}
while(m--)
{
int a,b;
scanf("%s%d%d",ch,&a,&b);
//printf("%c %d %d\n",ch[0],a,b);
if(ch[0]=='D')
Combine(a,b);
else
{
if(find(a)!=find(b))
printf("Not sure yet.\n");
else if(r[a]==r[b])
printf("In the same gang.\n");
else
printf("In different gangs.\n");
}
}
}
return 0;
}