P1955 80pts WA#2#3求助
查看原帖
P1955 80pts WA#2#3求助
1033744
wo666czh楼主2024/12/7 22:06

N如果再开大的话就会爆T

WA了2、3,有没有dalao帮忙找一下错

#include <bits/stdc++.h>
#define N 200005
#define int long long
using namespace std;
int n;
map<int,int>f;
struct Nodes{
	int x,y,opt;
}q[N];
bool cmp(Nodes x,Nodes y){return x.opt>y.opt;}
int getf(int x)
{
	if(f[x]==x)return x;
	return f[x]=getf(f[x]);
}
void add(int u,int v)
{
	int fu=getf(u),fv=getf(v);
	if(fu!=fv)f[fv]=fu;
}
signed main()
{
	int T;cin>>T;
	while(T--)
	{
		cin>>n;int maxn=0;
		for(int i=1;i<=n;i++)
		{
			cin>>q[i].x>>q[i].y>>q[i].opt;
			maxn=max(maxn,max(q[i].x,q[i].y));
		}
		sort(q+1,q+1+n,cmp);bool flag=false;
		for(int i=1;i<N;i++)f[i]=i;
		for(int i=1;i<=n;i++)
		{
			if(q[i].opt==1)add(q[i].x,q[i].y);
			else
			{
				if(getf(q[i].x)==getf(q[i].y))
				{
					cout<<"NO\n";
					flag=true;
					break;
				}
				else add(q[i].x,q[i].y+maxn),add(q[i].x+maxn,q[i].y);
			}
		}
		if(!flag)cout<<"YES\n";
	}
	return 0;
}
2024/12/7 22:06
加载中...