记录编号 557498 评测结果 AAAAAAAAAA
题目名称 [NOI 2015]程序自动分析 最终得分 100
用户昵称 GravatarOasiz 是否通过 通过
代码语言 C++ 运行时间 1.001 s
提交时间 2020-11-16 20:21:56 内存使用 20.96 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1000000*2+5;
int a[N][3],n,m,i,j,cnt,t,fa[N],ms[N];
unordered_map<int,int> c;
int get(int x) {
	return fa[x]==x?x:fa[x]=get(fa[x]);
}
void merge(int x,int y) {
	fa[get(x)]=get(y);
}
int main() {
	freopen("prog.in","r",stdin);
	freopen("prog.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>t;
	while(t--) {
		cin>>n;
		n*=3;
		for(int i=1; i<=n; i++) {
			int x;
			cin>>x;
			if (i%3) {//ij
				if (c[x]==0)
					c[x]=(++cnt);
				a[i/3+1][i%3]=c[x];
				fa[c[x]]=c[x];
			} else { //e
				ms[i/3]=x;
			}
		}
		int u=0;
		for(int i=1; i<=n/3; i++) {
			if (ms[i]) {
				merge(a[i][1],a[i][2]);
			}
		}
		for(int i=1; i<=n/3; i++){
			if (!ms[i]) {
				if (get(a[i][1])==get(a[i][2])) {
					u=true;
					cout<<"NO"<<endl;
					break;
				}
			}
		}
		if (!u){
			cout<<"YES"<<endl;
		}
	}
}