784. 强盗团伙 - AcWing题库 这道题的关键是敌人的敌人是朋友这句话。
因此对于当a和b是敌人的时候我们需要分两种情况来判断一下。、
1是a如果与b的敌人是敌人的话那么就把a合并到b的敌人的集合里面。
2是如果a与b的敌人是朋友的话,那么也把a合并到b的朋友的集合里面。
#include<bits/stdc++.h>
using namespace std;
const int N = 2500;
int p[N];
int n,m;
int find(int x){
if(x!=p[x]) p[x]=find(p[x]);
return p[x];
}
int main(){
cin>>n>>m;
for(int i=1;i<=2*n;i++) p[i] = i;
char op;
int a,b;
while(m--){
cin>>op>>a>>b;
if(op=='E'){ //a和b是敌人
p[find(a+n)] = find(b);
p[find(b+n)] = find(a);
}else{ //a和b是朋友
p[find(a)] = find(b);
}
}
int ans = 0;
for(int i=1;i<=n;i++) if(p[i] == i) ans++;
cout<<ans<<endl;
return 0;
}