80分求调
查看原帖
80分求调
353264
RainbowSheep_楼主2024/8/17 16:13

不开O2是WA,开了O2WA+RE(?

//https://www.luogu.com.cn/problem/P1892
#include <iostream>
#include <cstdio>
#include <bitset>
using namespace std;

#define MAXN 1010

int n,m,s[MAXN*2],p,q,tmp;
char opt;
bitset<MAXN>flag;

int find(int x)
{
    if(s[x]!=x)
        s[x]=find(s[x]);
    return s[x];
}
void merge(int x,int y)
{
    s[find(x)]=find(y);
}

int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    tmp=n*2;
    for(int i=1;i<=tmp;i++)
        s[i]=i;

    while(m--)
    {
        cin >> opt >> p >> q;
        switch(opt)
        {
        case 'E':
            merge(p,q+n);
            merge(q,p+n);
            break;
        
        default:
            merge(p,q);
            break;
        }
    }
    for(int i=1;i<=n;i++)
        flag[find(i)]=true;			//看大家这里都用的是ans+=s[i]==i,为什么可以这么做
    
    cout << flag.count() << endl;
    return 0;
}
2024/8/17 16:13
加载中...