P1955 [NOI2015] 程式自動分析
阿新 • • 發佈:2021-07-07
很容易看出是並查集
因為資料太大必須離散化
偷懶用了一下unordered_map(C++11)
dev c++需要在編譯選項中加入
-std=c++11
理論上unordered_map的複雜度為O(1),但實際肯定慢一些
#include<iostream> #include<cstdio> #include<unordered_map> using namespace std; unordered_map<int,int> fa; int a[100005],b[100005],l; int Fa(int x){returnfa[x]==x?x:fa[x]=Fa(fa[x]);} int main(){ // freopen("P1955_2.in","r",stdin); int T,n,x,y,p,k; scanf("%d",&T); while(T--){ scanf("%d",&n); fa.clear(); k=1; l=0; while(n--){ scanf("%d%d%d",&x,&y,&p); if(!fa[x]) fa[x]=x;if(!fa[y]) fa[y]=y; if(p==1){ int r1=Fa(x),r2=Fa(y); if(r1!=r2) fa[r1]=r2; }else ++l,a[l]=x,b[l]=y; } for(int i=1;i<=l;++i) if(Fa(a[i])==Fa(b[i])){ k=0; break; } puts(k?"YES":"NO"); } return 0; }