社区讨论
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 条回复,欢迎继续交流。
正在加载回复...