1. 程式人生 > 其它 >P1955 [NOI2015] 程式自動分析

P1955 [NOI2015] 程式自動分析

P1955 [NOI2015] 程式自動分析

很容易看出是並查集

因為資料太大必須離散化

偷懶用了一下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){return
fa[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; }