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. python:virtualenv的使用

    安装virtualenv 使用pip安装:pip install virtualenv virtualenvwrapper 其中virtualenvwrapper是virtualenv的扩展工具,用于 ...

  2. Scrapy笔记:日志的使用

    scrapy的日志记录有两种方式: spider.logger.xx()和python标准库中的logger = logging.get_Logger('log information') 向日志对象 ...

  3. 多线程设计模式 : Master-Worker模式

    Master-Worker是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和Worker进程.Master负责接收和分配任务,Worker负责处理子任务.当各个Worker ...

  4. LeetCode OJ-- Reorder List **

    https://oj.leetcode.com/problems/reorder-list/ 将一个链表重新排序,比如 1 2 3 4 5,变成 1 5 2 4 3 1.找到中间节点 mid 2.将链 ...

  5. 【转载】51CTO-Android设置模拟器屏幕大小

    在Eclipse Android中设置模拟器屏幕大小是本文要介绍的内容,主要是来了解并学习Eclipse Android中模拟器的设置,具体关于Eclipse Android内容的详解来看本文.   ...

  6. webapi 初识 net

    1.新建一个webapi 项目. 2.新建筛选器文件,用户在接口执行前后进行特性操作. public class MyActionWebApiAttribute : ActionFilterAttri ...

  7. 串口调试利器--Minicom配置及使用详解

    因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择.目前知道的,PL2303的驱动是有的,在dev下的名称是ttyUSB*. Minicom,是Linux下应用比较广泛的串口软 ...

  8. sqld360

    https://mauro-pagano.com/2017/04/15/sql-monitoring-flamegraph-and-execution-plan-temperature-2-0/ ht ...

  9. 创建maven项目是其中的group id和artifact id怎么填写

    groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找. groupId一般分为多个段 ...

  10. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...