团伙

来源:互联网 发布:adobe有哪些软件 编辑:程序博客网 时间:2024/04/28 19:30

题目

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int f1[2001],f[2001];int ff(int x) {       if(f1[x]!=x) f1[x]=ff(f1[x]);    return f1[x]; //找祖宗(路径压缩)}int main(){    int n,m;    scanf("%d",&n);    scanf("%d",&m);    for(int i=1;i<=n*2;i++)     f1[i]=i;//自己的爸爸是自己,处理到2*n    for(int i=1;i<=m;i++)    {        char c;        int x,y;        cin>>c>>x>>y;        if(c=='F')        {            if(ff(x)!=ff(y))            f1[ff(x)]=ff(y);//朋友就合并x,y。但是并不用合并x+n和y+n因为,朋友的敌人不一定是朋友。        }        else        {            if(ff(y)!=ff(x+n))            f1[ff(x+n)]=ff(y);//敌人的敌人合并            if(ff(x)!=ff(y+n))            f1[ff(y+n)]=ff(x);        }    }    int ans=0;    for(int i=1;i<=n;i++)     if(f1[i]==i) ans++; //找有几个根节点。    printf("%d",ans);    return 0;}
0 0