Description

在实现程序自己主动分析的过程中,经常须要判定一些约束条件能否被同一时候满足。

考虑一个约束满足问题的简化版本号:如果x1,x2,x3,…代表程序中出现的变量。给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件。请判定能否够分别为每个变量赋予恰当的值,使得上述全部约束条件同一时候被满足。比如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4。这些约束条件显然是不可能同一时候被满足的。因此这个问题应判定为不可被满足。
如今给出一些约束满足问题,请分别对它们进行判定。

Input

输入文件的第1行包括1个正整数t,表示须要判定的问题个数。注意这些问题之间是相互独立的。

对于每一个问题,包括若干行:
第1行包括1个正整数n。表示该问题中须要被满足的约束条件个数。

接下来n行,每行包含3个整数i,j,e,描写叙述1个相等/不等的约束条件,相邻整数之间用单个空格隔开。

若e=1,则该约束条件为xi=xj。若e=0,则该约束条件为xi≠xj。

Output

输出文件包含t行。

输出文件的第k行输出一个字符串“YES”或者“NO”(不包括引號。字母所有大写)。“YES”表示输入中的第k个问题判定为能够被满足。“NO”表示不可被满足。

Sample Input

2

2

1 2 1

1 2 0

2

1 2 1

2 1 1

Sample Output

NO

YES

HINT

在第一个问题中,约束条件为:x1=x2,x1≠x2。这两个约束条件互相矛盾,因此不可被同一时候满足。

在第二个问题中。约束条件为:x1=x2,x2=x1。

这两个约束条件是等价的,能够被同一时候满足。

1≤n≤100000
1≤i,j≤1000000000
题解:非常显然能够用并查集来推断相等或不相等的关系。由于数值比較大而n比較小,所以离散一下就好了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct use{
int v1,v2,p1,p2,kind;
}a[1000001];
bool ff;
int fa[1000001],t,n,x,y,k,tt,c[1000001],tot;
int find(int x)
{
if (x!=fa[x]) fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
freopen("prog.in","r",stdin);
freopen("prog.out","w",stdout);
scanf("%d",&t);
while (t--)
{
memset(c,0,sizeof(c));
scanf("%d",&n);tt=0;ff=true;
for (int i=1;i<=2*n;i++) fa[i]=i;
for (int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&k);
c[++tt]=x;c[++tt]=y;
a[i].v1=x;a[i].v2=y;a[i].kind=k;
}
sort(c+1,c+tt+1);
tot=unique(c+1,c+tt+1)-c-1;
for (int i=1;i<=n;i++)
{
int r1,r2;
a[i].p1=upper_bound(c+1,c+tot+1,a[i].v1)-c-1;
a[i].p2=upper_bound(c+1,c+tot+1,a[i].v2)-c-1;
r1=find(a[i].p1);r2=find(a[i].p2);
if (a[i].kind==1)
{
r1=find(a[i].p1);r2=find(a[i].p2);
if (r1!=r2) fa[r1]=r2;
}
}
for (int i=1;i<=n;i++)
{
int r1,r2;
if (a[i].kind==0)
{
r1=find(a[i].p1);r2=find(a[i].p2);
if (r1==r2){ff=false;break;}
}
}
if (ff) printf("YES\n");
else printf("NO\n");
}
}

【NOI2015】【程序自己主动分析】【并查集+离散化】的更多相关文章

  1. BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化

    LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...

  2. BZOJ 4195: [Noi2015]程序自动分析 [并查集 离散化 | 种类并查集WA]

    题意: 给出若干相等和不等关系,判断是否可行 woc NOI考这么傻逼的题飞快打了一个种类并查集交上了然后爆零... 发现相等和不等看错了异或一下再叫woc90分 然后发现md$a \neq b, a ...

  3. NOI2015 洛谷P1955 程序自动分析(并查集+离散化)

    这可能是我目前做过的最简单的一道noi题目了...... 先对e=1的处理,用并查集:再对e=0查询,如果这两个在同一集合中,则为""NO",最后都满足的话输出" ...

  4. BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化

    总的来说,这道题水的有点莫名奇妙,不过还好一次轻松A 4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 836 ...

  5. [UOJ#131][BZOJ4199][NOI2015]品酒大会 后缀数组 + 并查集

    [UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...

  6. 【并查集+离散化】BZOJ4195- [Noi2015]程序自动分析

    [题目大意] 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的 ...

  7. 【BZOJ4199】[Noi2015]品酒大会 后缀数组+并查集

    [BZOJ4199][Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默 ...

  8. [NOI2015] 品酒大会 - 后缀数组,并查集,STL,启发式合并

    [NOI2015] 品酒大会 Description 对于每一个 \(i \in [0,n)\) 求有多少对后缀满足 LCP 长度 \(\le i\) ,并求满足条件的两个后缀权值乘积的最大值. So ...

  9. BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )

    求出后缀数组后, 对height排序, 从大到小来处理(r相似必定是0~r-1相似), 并查集维护. 复杂度O(NlogN + Nalpha(N)) ------------------------- ...

随机推荐

  1. duilib入门简明教程 -- 完整的自绘标题栏(8) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343763.html     看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题 ...

  2. 【Android】SQLite基本用法(转)

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

  3. /* Dr黄的技术博客开通啦 */

    以前懒得写技术日志, 现在终于发现重要性.. mark一下这个里程碑.

  4. Cryptography I 学习笔记 --- 密钥交换

    1. 使用可信第三方(Trusted third parties)进行密钥交换. a. Alice与TTP之间的密钥是K1,Bob与TTP之间的密钥是K2. b. Alice向TTP发起一个与Bob交 ...

  5. linux定时问题

    手动运行java脚本,可以,但定时运行没效果 查看脚本是否赋予执行权限:若无则赋予可执行权限,若还是没用,则在脚本增添环境变量,百度搜索.

  6. UOJ 外星人

    题目: 2044年,Picks建成了人类第一台基于量子理论的银河系信息传递机.Picks游遍了宇宙,雇用了n个外星人来帮他作为信息传递机的中转站.我们将外星人依次编号为1 到n,其中i 号外星人有ai ...

  7. 分享Kali Linux 2017年第18周镜像文件

     分享Kali Linux 2017年第18周镜像文件  Kali Linux官方于4月30日发布2017年的第18周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KD ...

  8. XSY 1749 tree

    题目大意 给定一棵基环树, 问你有多少条路径的长度\(\ge K\). 点数\(\le 10^5\) Solution 基环树分治模板题. 我是这样做的: 加边的时候用并查集维护点的连通性, 少加入环 ...

  9. 网络安全---大学霸_ITDaren

    http://blog.csdn.net/u014621518/article/category/2191665

  10. Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...