记录编号 593690 评测结果 AAAAAAAAAA
题目名称 [NOI 2015]程序自动分析 最终得分 100
用户昵称 Gravatar健康铀 是否通过 通过
代码语言 C++ 运行时间 1.147 s
提交时间 2024-09-08 23:49:31 内存使用 4.66 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long t,n,fa[300010];
vector<long long>v;
inline int read(){
	char ch=getchar();int x=0,f=1;
	while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
struct node{
	long long x;
	long long y;
	long long z;
}e[100010];
long long get(long long x){
	return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
}
long long find(long long x,long long l){
	 
	if(fa[x]==x){
		return x;
	}
	
	return fa[x]=find(fa[x],x);
}
void join(long long x,long long y){
	long long rx=find(x,0),ry=find(y,0);
	if(rx==ry)
	return;
	fa[ry]=rx;
	
}
long long ask(long long x,long long y){
	long long rx=find(x,0),ry=find(y,0);
	if(rx==ry)
	return 1;
	return 0;
}
int main(){
	freopen("prog.in","r",stdin);
    freopen("prog.out","w",stdout);
	cin>>t;
	while(t--){
		cin>>n;
		v.clear();
		for(long long i=1;i<=n;i++){
			e[i].x=read(),e[i].y=read(),e[i].z=read();
			v.push_back(e[i].x);
			v.push_back(e[i].y);
		}
		sort(v.begin(),v.end());
		v.erase(unique(v.begin(),v.end()),v.end());
		for(long long i=1;i<=n;i++){
		
			e[i].x=get(e[i].x);
			e[i].y=get(e[i].y);
			fa[e[i].x]=e[i].x;
			fa[e[i].y]=e[i].y;
		}
		for(long long i=1;i<=n;i++){
			if(e[i].z==0)
			continue;
			join(e[i].x,e[i].y);
		}
		
		for(long long i=1;i<=n;i++){
			if(e[i].z==0){
				if(ask(e[i].x,e[i].y)==1){
					
					cout<<"NO"<<endl;
					break;
				}
			}
			if(i==n){
				cout<<"YES"<<endl;
			}
		}
		
	}
	return 0;
}