题面:https://www.luogu.org/problemnew/show/P1892
本题可以把朋友并在一起,用一个数组记录敌人,然后把敌人的敌人和自己并在一起即可。
Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<ctime>
using namespace std;
int n,m,i,ans,a,b,f[500005],s[500005];
char c;
int find(int x)
if(f[x]==0)
return x;
else
return f[x]=find(f[x]);
void unionn(int a,int b)
int l=find(a);
int r=find(b);
if(l!=r)
f[l]=r;
int main()
cin>>n>>m;
for(i=1;i<=m;i++)
cin>>c>>a>>b;
if(c==‘F‘)
unionn(a,b);
if(c==‘E‘)
if(s[a]!=0)
unionn(s[a],b);
if(s[b]!=0)
unionn(s[b],a);
s[a]=b;
s[b]=a;
for(i=1;i<=n;i++)
if(f[i]==0)
ans++;
cout<<ans<<endl;
exit(0);