社区讨论

90分持续30min求助

P1955[NOI2015] 程序自动分析参与者 4已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mi7cr56t
此快照首次捕获于
2025/11/20 19:32
4 个月前
此快照最后确认于
2025/11/20 19:32
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define re register int
#define MAXN 100010
using namespace std;
typedef long long ll;
ll read()
{
	ll ret=0,f=1;char ch=getchar();
	while('0'>ch||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while('0'<=ch&&ch<='9'){ret=(ret<<3)+(ret<<1)+(ch^48);ch=getchar();}
	return ret*f;
}
map<int,int> get;
int fa[MAXN<<2],n,T,k,u,v,DFN;
bool flag;
int find(int x)
{
	if(fa[x]!=x)fa[x]=find(fa[x]);
	return fa[x];
}
int main()
{
	T=read();
	while(T--)
	{
		n=read();flag=0;DFN=0;
		for(re i=1;i<=(n<<2);i++)fa[i]=i;
		get.clear();
		for(re i=1;i<=n;i++)
		{
			u=read(),v=read(),k=read();
			if(!flag)
			{
				if(get.find(u)==get.end())get[u]=++DFN;
				if(get.find(v)==get.end())get[v]=++DFN;
				u=get[u];v=get[v];
				if(k)
				{
					if(find(u)==find(v+(n<<1)))flag=1;
					else fa[find(u)]=find(v),fa[find(u+(n<<1))]=find(v+(n<<1));
				}
				else 
				{
					if(find(u)==find(v))flag=1;
					else fa[find(u)]=find(v+(n<<1)),fa[find(u+(n<<1))]=find(v);
				}
			}
		}
		if(flag)puts("NO");
		else puts("YES");
	}
}
写了个种类并查集第三个点持续WA中 抑郁了。。。。。。 求教各位大佬瑕疵在何处

回复

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

正在加载回复...