Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 26679 | Accepted: 8090 |
Description
Assume N (N <= 10^5) criminals are currently in Tadu City, numbered from 1 to N. And of course, at least one of them belongs to Gang Dragon, and the same for Gang Snake. You will be given M (M <= 10^5) messages in sequence, which are in the following two kinds:
1. D [a] [b]
where [a] and [b] are the numbers of two criminals, and they belong to different gangs.
2. A [a] [b]
where [a] and [b] are the numbers of two criminals. This requires you to decide whether a and b belong to a same gang.
Input
Output
Sample Input
1 5 5 A 1 2 D 1 2 A 1 2 D 2 4 A 1 4
Sample Output
Not sure yet. In different gangs. In the same gang.
Source
var
t,n,m,i,x,y:longint;
s:char;
f:array[1..100000] of longint;
diff:array[1..100000] of longint;
function findset(x:longint):longint;
begin
if x<>f[x] then
f[x]:=findset(f[x]);
exit(f[x]);
end;
procedure union(x,y:longint);
var
fx,fy:longint;
begin
fx:=findset(x);
fy:=findset(y);
f[fx]:=fy;
end;
procedure main;
var
i:longint;
begin
fillchar(f,sizeof(f),0);
fillchar(diff,sizeof(diff),0);
readln(n,m);
for i:=1 to n do
f[i]:=i;
for i:=1 to m do
begin
readln(s,x,y);
case s of
'A':begin
x:=findset(x);
y:=findset(y);
if x=y then writeln('In the same gang.')
else
if (x<>y) and (findset(diff[x])=findset(y)) then
writeln('In different gangs.')
else
if (x<>y) and (findset(diff[x])<>findset(y)) then
writeln('Not sure yet.');
end;
'D':begin