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