求调
查看原帖
求调
492281
longerfu楼主2024/11/26 18:22

编译器#2点过了 评测机没过 求调

#include <iostream>
using namespace std;
int n,m;
char opt;

int c1,c2;
int ans;
int fa[1000005];
int fa2[1000005];
int cnt[1000005];
inline int read()
{
    int x=0;int f =1;
    char ch=getchar();
    while('0'>ch||ch>'9')
    {
        if(ch=='-') 
        {
            f  = -1;
        }
        ch = getchar();
    } 
    while('0'<=ch&&ch<='9')
    {
        x = x*10+ch-'0';
        ch = getchar();
    }
    return x*f;
}
int find(int x)
{
    if(fa[x]==x) return fa[x];
    return find(fa[x]);
}
void merge(int x,int y)   
{
    x=find(x);
    y=find(y);  
    if(x==y) return;
    fa[y]=x;
    return;
}
int x,y;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) fa[i] = i;
    for(int i =1;i<=m;i++)
    {
        opt = getchar();
        x = read();
        y = read();
        if(opt=='F')
        {
            merge(x,y);
        }
        else{
            if(!fa2[x])
            {
                fa2[x]  =find(y);
            } 
            else{
                merge(y,fa2[x]);
            }
            if(!fa2[y])
            {
                fa2[y]  =find(x);
            } 
            else{
                merge(x,fa2[y]);
            }
        }
    }
    for(int i=1;i<=n;i++)
        cnt[find(i)]++;
    for(int i=1;i<=n;i++)
        if(cnt[i]) ans++;
    cout<<ans;
    return 0;
}   
2024/11/26 18:22
加载中...