记录编号 |
557498 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2015]程序自动分析 |
最终得分 |
100 |
用户昵称 |
Oasiz |
是否通过 |
通过 |
代码语言 |
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;
}
}
}