社区讨论

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 条回复,欢迎继续交流。

正在加载回复...