社区讨论
P9869 [NOIP2023] 三值逻辑 60pts
学术版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m25qtlfb
- 此快照首次捕获于
- 2024/10/12 13:55 去年
- 此快照最后确认于
- 2024/10/12 18:24 去年
CPP
#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
#define int long long
#define repu(i,u) for(int i=(h[u]);i;i=(ne[i]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define xx return
const int N=2e5+10;
const int T=200001,F=200002,U=200003;
int c,t,n,m;
int a[N*2],fa[N*2];
int find(int x)
{
xx x==fa[x]?x:fa[x]=find(fa[x]);
}
void solve()
{
scanf("%lld%lld",&n,&m);
rep(i,0,N)fa[i]=i,a[i]=i;
int ans=0;
rep(i,1,m)
{
char opt;cin>>opt;
if(opt=='+')
{
int x,y;scanf("%lld%lld",&x,&y);
a[x]=a[y];
a[x+n]=a[y+n];
}
if(opt=='-')
{
int x,y;scanf("%lld%lld",&x,&y);
if(x==y)
{
a[x]=U,a[x+n]=U;
}
else {
a[x]=a[y+n];
a[x+n]=a[y];
}
}
if(opt=='U')
{
int x;scanf("%lld",&x);
a[x]=U,a[x+n]=U;
}
if(opt=='T')
{
int x;scanf("%lld",&x);
a[x]=T;
a[x+n]=F;
}
if(opt=='F')
{
int x;scanf("%lld",&x);
a[x]=F;
a[x+n]=T;
}
}
rep(i,1,2*n)
{
fa[find(i)]=find(a[i]);
}
rep(i,1,n)
{
if(find(i)==find(i+n))ans++;
}
printf("%lld\n",ans);
xx;
}
signed main()
{
scanf("%lld%lld",&c,&t);
while(t--)solve();
xx 0;
}
后四个点全 WA 求调
回复
共 1 条回复,欢迎继续交流。
正在加载回复...