90分求助,第二个点RE
查看原帖
90分求助,第二个点RE
530180
KingPowers楼主2022/2/9 11:34
这数组够大了吧
#include<bits/stdc++.h>
#define int long long
using namespace std;
int f[1145140],n,x[1145140],y[1145140],op[1145140],flag=0,t;
int find(int x)
{
	if(f[x]!=x)
		f[x]=find(f[x]);
	return f[x];
}
signed main()
{
	//freopen("test.in","r",stdin); 
	cin>>t;
	while(t--)
	{
		memset(f,0,sizeof(f));
		flag=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>x[i]>>y[i]>>op[i];
			f[x[i]]=x[i];
			f[y[i]]=y[i];
		}
		for(int i=1;i<=n;i++)
			if(op[i]==1)
				f[find(y[i])]=find(x[i]);
		for(int i=1;i<=n;i++)
			if(!op[i])
				if(find(x[i])==find(y[i]))
				{
					cout<<"NO\n";
					flag=1;
					break;
				}
		if(!flag)
			cout<<"YES\n";
	}
}
2022/2/9 11:34
加载中...