记录编号 406683 评测结果 AAAAAAAAAA
题目名称 [NOI 2015]程序自动分析 最终得分 100
用户昵称 Gravatar泪寒之雪 是否通过 通过
代码语言 C++ 运行时间 0.633 s
提交时间 2017-05-19 17:56:21 内存使用 130.01 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define p 6000007
#define N 10000007
#define time timesss
using namespace std;
/*struct Node {
	int data,key,time;
}f[N];*/
int b,tot,lll,n,i,a[N/5],bb[N/5],t,x,y,tlt,xx,yy,ans,totsss,xa,ya,data[N],key[N],time[N];
char c;
inline void read (int &x){
	b=1;c=getchar();
	for (;!('0'<=c && c<='9');c=getchar()) if (c=='-') b=-1;
	for (x=0;('0'<=c && c<='9');) {
		x=x*10+c-'0';
	    c=getchar();
	} 
	x=x*b;
}
inline int hashs(int x){
	totsss=x%p+10;
	while (time[totsss]==lll && key[totsss]!=x) totsss++;
	if (time[totsss]!=lll) time[totsss]=lll,key[totsss]=x,data[totsss]=x;
	return totsss;
}
int getfather(int x){
    if (key[x]==data[x]) return x;
	data[x]=getfather(data[x]);
	return data[x];	
	 
}
int main (){
	freopen("prog.in","r",stdin);
	freopen("prog.out","w",stdout);
     read(t);
     for (lll=1;lll<=t;lll++)
      {
      	tot=0;
      	 read(n);
      	 for (i=1;i<=n;i++)  {
		   read(x);  read(y);
		   read(tlt);
		   if (tlt==0) {
		   	a[++tot]=x; bb[tot]=y;
		   }
		   else {
		   	 xa=hashs(x);
		   	 ya=hashs(y);
		   	 xx=getfather(xa);
		   	 yy=getfather(ya);
		  // 	xx=getfather(hashs(x));
		  // 	yy=getfather(hashs(y));
		   	 if (xx!=yy) {
		   	 	   data[yy]=xx;
				}
		   }
		  }
		   ans=1;
		  for (i=1;i<=tot;i++)
		    {
			   ans=ans & (getfather(hashs(a[i]))!=getfather(hashs(bb[i])));
			   if (ans==0) break;
			}
		printf("%s\n",ans?"YES":"NO");
	  }
}