90分求条,WA on #2,玄关
查看原帖
90分求条,WA on #2,玄关
741578
hhhh2971楼主2025/2/3 22:15

rt,代码如下:

#include<bits/stdc++.h>
using namespace std;

long long a[100005],b[100005],e[100005];
long long f[200005];
map <long long,long long> mp;

long long se(long long x)
{
	if (f[x]==x) return f[x];
	f[x]=se(f[x]);
	return f[x];
}

void he(long long x,long long y)
{
	if (se(y)!=se(x)) f[se(y)]=se(x);
	return;
}

int main()
{
	long long t;
	cin >> t;
	for (long long i=1;i<=t;i++)
	{
		mp.clear();
		bool cmp=false;
		long long n;
		long long cnt=0;
		cin >> n;
		for (long long j=1;j<=n;j++)
		{
			scanf("%d %d %d",&a[j],&b[j],&e[j]);
			if (!mp[a[j]])
			{
				cnt++;
				mp[a[j]]=cnt;
			}
			if (!mp[b[j]] && a[j]!=b[j])
			{
				cnt++;
				mp[b[j]]=cnt;
			}
		}
		for (long long j=1;j<=100000;j++)
		{
			f[j]=j;
			f[j+100000]=j+100000;
		}
		for (long long j=1;j<=n;j++)
		{
			if (a[j]==b[j] && e[j]==0)
			{
				cout << "NO" << endl;
				cmp=true;
				break;
			}
			if (se(mp[a[j]])==se(mp[b[j]]) && e[j]==0 || se(mp[a[j]]+100000)==se(mp[b[j]]+100000) && e[j]==1 && a[j]!=b[j])
			{
//				cout << j << " " << fx << " " << fy << endl;
				cout << "NO" << endl;
				cmp=true;
				break;
			}
			if (a[j]==b[j]) continue;
			if (e[j]==1) he(mp[a[j]],mp[b[j]]);
			else he(mp[a[j]]+100000,mp[b[j]]+100000);
		}
		for (long long j=n;j>=1 && !cmp;j--)
		{
			if (a[j]==b[j] && e[j]==0)
			{
				cout << "NO" << endl;
				cmp=true;
				break;
			}
			if (se(mp[a[j]])==se(mp[b[j]]) && e[j]==0 || se(mp[a[j]]+100000)==se(mp[b[j]]+100000) && e[j]==1 && a[j]!=b[j])
			{
//				cout << j << " " << fx << " " << fy << endl;
				cout << "NO" << endl;
				cmp=true;
				break;
			}
			if (a[j]==b[j]) continue;
			if (e[j]==1) he(mp[a[j]],mp[b[j]]);
			else he(mp[a[j]]+100000,mp[b[j]]+100000);
		}
		if (!cmp) cout << "YES" << endl;
	}
	
	return 0;
}
2025/2/3 22:15
加载中...