| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大牛帮忙看看 WA 2492过了 谢谢#include<cstdio>
using namespace std;
#define MAX 100100
int set[MAX],rank[MAX],opp[MAX];
int n,m;
int findx(int &x)
{
int r = x;
while( r != set[r] )
r=set[r];
int i = x,j;
while(i != r)
{
j=set[i];
set[i]=r;
i=j;
}
return r;
}
void merge(int &x,int &y)
{
int fx=findx(x);
int fy=findx(y);
if(rank[fx]>rank[fy])
set[fy]=fx;
else if(rank[fy]>rank[fx])
set[fx]=fy;
else
{
set[fx]=fy;
rank[fy]+=1;
}
}
void makeset()
{
for(int i=1;i<=n;i++)
{
set[i]=i;
rank[i]=0;
opp[i]=-1;
}
}
int main()
{
int t,i,x,y;
char ch;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
makeset();
for(i=1;i<=m;i++)
{
getchar();
scanf("%c",&ch);
scanf("%d%d",&x,&y);
if(ch=='D')
{
if(opp[x]!=-1)
{
merge(opp[x],y);
}
else if(opp[y]!=-1)
{
merge(opp[y],x);
}
opp[x]=y;
opp[y]=x;
}
else
{
if(findx(x)==findx(y))
puts("In the same gang.");
else if(findx(x) == findx(opp[y])||findx(y) == findx(opp[x]))
puts("In different gangs.");
else
puts("Not sure yet.");
}
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator