unordered_map+反集,WA=60 求助
查看原帖
unordered_map+反集,WA=60 求助
781046
tai_chi楼主2022/9/12 20:22

WA on #2,#3,#4,#8.qwq

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=1e11;
int T;
int n,tot;
unordered_map<int,int> fa;
int find(int x)
{
	if(fa[x]==x)
		return x;
	fa[x]=find(fa[x]);
	return fa[x];
}
void mrg(int x,int y)
{
	int z1=find(x),z2=find(y);
	fa[z1]=z2;
}
signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>T;
	for(int t=1;t<=T;t++)
	{
		cin>>n;
		fa.clear();
		int x,y,opt;
		int flag=1;
		for(int i=1;i<=n;i++)
		{
			cin>>x>>y>>opt;
			if(!fa[x])fa[x]=x;//fa初始化 
			if(!fa[y])fa[y]=y;
			if(opt==1)
			{
				if(find(x)!=find(y+inf))//没被合并反集 
					mrg(x,y);
				else
					flag=0;
			}
			if(opt==0)
			{
				if(find(x)!=find(y))//没被合并过 
				{
					mrg(x,y+inf);//合并反集 
					mrg(x+inf,y);
				}
				else
					flag=0;
			}
		}
		if(flag==1)
			cout<<"YES"<<endl;
		if(flag==0)
			cout<<"NO"<<endl;
	}
	return 0;
}
2022/9/12 20:22
加载中...