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; }