记录编号 205610 评测结果 AAAAAAAAAA
题目名称 [NOI 2015]程序自动分析 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 3.220 s
提交时间 2015-11-05 16:37:23 内存使用 11.76 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=500000+10;
map<int,int>mp;
int a[maxn],b[maxn],p[maxn];
int proa[maxn],prob[maxn];
int tot=0,cnt=0,n,f[maxn];
char ch;

int read(){
	int num=0;ch=getchar();
	while (ch<'!') ch=getchar();
	while (ch>='0'&&ch<='9'){num=num*10+ch-'0';ch=getchar();}
	return num;
}

int find(int x){
	return x==f[x]?x:f[x]=find(f[x]);
}

int main(){
	freopen("prog.in","r",stdin);
	freopen("prog.out","w",stdout);
	int t; t=read();
	while (t--){
		n=read(); tot=0;
		mp.clear(); cnt=0;
		for (int i=1;i<=n;++i){
			a[i]=read(); b[i]=read(); p[i]=read();
			if (!mp[a[i]]) mp[a[i]]=++tot;
			if (!mp[b[i]]) mp[b[i]]=++tot;
		}
		for (int i=1;i<=tot;++i) f[i]=i;
		for (int i=1;i<=n;++i){
			int u=mp[a[i]];
			int v=mp[b[i]];
			if (p[i]==1){
				int p=find(u);
				int q=find(v);
				if (p!=q) f[p]=q;
			}else {
				proa[++cnt]=u;
				prob[cnt]=v;
			}
		}
		bool flag=1;
		for (int i=1;i<=cnt;++i){
			int p=find(proa[i]);
			int q=find(prob[i]);
			if (p==q){
				printf("NO\n");
				flag=0; break;
			}
		}
		if (flag) printf("YES\n");
	}
	//system("pause");
}