传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1370
题目大意
给定n个人,朋友的朋友是朋友,敌人的敌人是朋友,朋友之间组成一个团伙,求团伙数
题解
并查集
我们来拆点,x拆为x和x+n
如果两个人是朋友,合并a和b
如果两个人是敌人,合并a和b+n,以及b和a+n
朋友的朋友显然满足
敌人的敌人,a和b是敌人,b和c是敌人,{a,b+n,c}{a+n,b,c+n}
var
x,fa:array[0..3000]of longint;
i,j,k:longint;
n,m:longint;
a:char;
b,c,ans:longint;
function get(a:longint):longint;
begin
if fa[a]=a then exit(a);
fa[a]:=get(fa[a]);
exit(fa[a]);
end;
begin
readln(n); readln(m);
for i:=1 to 2*n do
fa[i]:=i;
for i:=1 to m do
begin
readln(a,b,c);
if a='E'
then begin fa[get(c+n)]:=get(b); fa[get(b+n)]:=get(c); end
else begin fa[get(b)]:=get(c); end;
end;
fillchar(x,sizeof(x),0);
ans:=0;
for i:=1 to n do
if x[get(i)]=0
then begin inc(ans); x[get(i)]:=1;end;
writeln(ans);
end.