1 条题解
-
0
udmap 实现并查集。 水过啦~
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int a[N],b[N],n,t,l; unordered_map<int,int>fa; inline int Find(int x) { if(fa[x]==x)return x; return fa[x]=Find(fa[x]); } inline void Merge(int x,int y) { int fx=Find(x),fy=Find(y); if(fx!=fy)fa[fx]=fy; } inline int Read() { int f=1,x=0; char ch=getchar(); while(!isdigit(ch) && ch^'-')ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); return x*f; } signed main() { t=Read(); while(t--) { n=Read(); bool flag=1; l=0;fa.clear(); while(n--) { int x=Read(),y=Read(),opt=Read(); if(fa[x]==0)fa[x]=x; if(fa[y]==0)fa[y]=y; if(opt==1)Merge(x,y); else a[++l]=x,b[l]=y; } for(int i=1;i<=l;++i) { if(Find(a[i])==Find(b[i])) { flag=0;break; } } if(flag)puts("YES"); else puts("NO"); } return 0; }
- 1
信息
- ID
- 148
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 18
- 已通过
- 2
- 上传者