社区讨论

0分求调,马蜂良好

P9869[NOIP2023] 三值逻辑参与者 6已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mhj1r9fs
此快照首次捕获于
2025/11/03 19:18
4 个月前
此快照最后确认于
2025/11/03 19:18
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5,T=N*2+1,F=N*2+2,U=N*2+3;
int c,t,n,m,fa[2*N+5],ans;
int x[N];
int find(int a){
    return fa[a]==a?a:fa[a]=find(fa[a]);
}
void merge(int a,int b){
    fa[find(a)]=find(b);
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>c>>t;
    while(t--){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            fa[i]=i;
            fa[i+N]=i+N;
        }
        fa[T]=T;fa[F]=F;fa[U]=U;
        for(int k=1;k<=m;k++){
            char v;
            cin>>v;
            int i;
            if(v=='T'||v=='F'||v=='U'){                
                cin>>i;
                if(v=='T'){
                    merge(i,T);
                    merge(i+N,F);
                }
                else if(v=='F'){
                    merge(i,F);
                    merge(i+N,T);
                }
                else{
                    merge(i,U);
                    merge(i+N,U);
                }
            }
            else{
                int j;
                cin>>i>>j;
                if(v=='+'){
                    merge(i,j);
                    merge(i+N,j+N);
                }
                else{
                    merge(i,j+N);
                    merge(i+N,j);
                }
            }
        }
        ans=0;
        if(find(T)==find(F))cout<<n<<'\n';
        else{
            for(int i=1;i<=n;i++){
                if(find(i)==find(U)||find(i)==find(i+N))ans++;
            }
            cout<<ans<<'\n';
        }
    }
}

回复

7 条回复,欢迎继续交流。

正在加载回复...