记录编号 197660 评测结果 AAAAAAAAAA
题目名称 [NOI 2015]程序自动分析 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 C++ 运行时间 1.695 s
提交时间 2015-10-24 10:45:48 内存使用 7.83 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
int T,n,N,num,u,v,fa[200100];
struct shizi
{
	int x,y,e;
}o[100100];
struct tip
{
	int w,id;
}x[200100];
inline bool comp(tip a,tip b)
{
	return a.w<b.w;
}
inline bool cmp(shizi a,shizi b)
{
	return a.e>b.e;
}
inline int find(int x)
{
	if(fa[x]==x)
	    return x;
	return fa[x]=find(fa[x]);
}
int main()
{
	freopen("prog.in","r",stdin);
	freopen("prog.out","w",stdout);
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		memset(o,0,sizeof(o));
		for(int i=1;i<=n;++i)
		{
			scanf("%d%d%d",&x[i<<1].w,&x[i<<1|1].w,&o[i].e);
			x[i<<1].id=i;
			x[i<<1|1].id=i;
		}
		N=(n<<1|1);
		std::sort(x+2,x+N+1,comp);
		num=0;
		for(int i=2;i<=N;++i)
		{
			if(x[i].w!=x[i-1].w)
				++num;
			if(!o[x[i].id].x)
				o[x[i].id].x=num;
			else
			    o[x[i].id].y=num;
		}
		for(int i=1;i<=num;++i)
		    fa[i]=i;
		std::sort(o+1,o+n+1,cmp);
		int i=1;
		while(o[i].e)
		{
			u=find(o[i].x);
			v=find(o[i].y);
			if(u!=v)
				fa[v]=u;
			++i;
		}
		bool no=0;
		while(i<=n)
		{
			u=find(o[i].x);
			v=find(o[i].y);
			if(u==v)
				no=1;
			++i;
		}
		if(no)
		    puts("NO");
		else
		    puts("YES");
	}
}