标签:
和昨天晚上做的 A Bug‘s Life是一样思路的题···开始做的时候还是有些小问题,就在各种问题中进步吧。
#include<cstdio>
#define Size 100000
int N, M;
int Rel[Size+1], Pre[Size+1];
void Init()
{
for( int i=1; i<=N; i++ )
{
Rel[i]=0; // 自己和自己同一个帮派
Pre[i]=i;
}
}
int GetPre(int a)
{
if( Pre[a] == a )
return a;
int t = GetPre(Pre[a]);
Rel[a] = Rel[a]^Rel[Pre[a]];
Pre[a] = t;
return Pre[a];
}
void Union(int a, int b)
{
int Pa = GetPre(a);
int Pb = GetPre(b);
if( Pa == Pb )
return;
Pre[Pa] = Pb;
Rel[Pa] = ~(Rel[a]^Rel[b]);
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &N, &M);
Init();
while(M--)
{
char C;
int a, b;
getchar();//这个怎么可以忘呢···
scanf("%c%d%d", &C, &a, &b);
if( C==‘A‘ )
{
int Pa = GetPre(a);
int Pb = GetPre(b);
if( Pa==Pb )
if( Rel[a] == Rel[b] )
printf("In the same gang.\n");
else
printf("In different gangs.\n");
else
printf("Not sure yet.\n");
}
else
Union(a, b);
}
}
return 0;
}
【转】POJ-1703-Find them, Catch them:集合内的元素具有某种关系,集合间的关系不确定
标签:
原文地址:http://www.cnblogs.com/FightForCMU/p/4691145.html