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. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---14

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  2. html5手机返回按钮跳转到指定页面问题

    最近在做活动的时候有一个这样的场景,在主页面点击跳出一个弹层表单,填写完信息后,点击确认跳转到指定的展示页面了.这时候在手机端点击浏览器自带的返回按钮后,回到主页面,这时候主页面无法刷新,弹层信息还在 ...

  3. Codeforces Gym101522 D.Distribution of Days-算日期 (La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017)

    D.Distribution of Days The Gregorian calendar is internationally the most widely used civil calendar ...

  4. Codeforces 371E Subway Innovation (前缀和预处理应用)

    题目链接 Subway Innovation 首先不难想到所求的k个点一定是连续的,那么假设先选最前面的k个点,然后在O(1)内判断第2个点到第k+1个点这k个点哪个更优. 判断的时候用detla[i ...

  5. ActiveMQ 权限(二)

    在 ActiveMQ 权限(一) 配置了对消息队列的权限,以下设置完成消息的权限,比如只接受某ip的消息. 两步完成, 第一步:继承接口org.apache.activemq.security.Mes ...

  6. Java IO设计模式

    JAVA IO 设计模式彻底分析 2011-01-06 14:20:09|  分类: java|字号 订阅 http://blog.csdn.net/tianyue168/archive/2010/0 ...

  7. 实现一个Java五子棋

    五子棋手把手教你写: 写在前面的话: 回想起从前初学代码的五子棋简直写的不像样子.今天闲来无事就写了个五子棋的小程序. 一来呢回忆一下很久以前写代码时的感觉. 二来呢顺便帮下诸位有需求的学生,顺利的C ...

  8. 解决 java.sql.SQLException: Before start of result set

    java中使用如下代码做数据库连接,用以查询数据 *******************我是分割线************************************* try { Class.f ...

  9. python+tesseract验证码识别的一点小心得

    由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进 ...

  10. Activity入门(一)

    生命周期         onCreate():activity进行创建,在该方法中应调用setContentView(),findViewById()以及获取要展示的数据的方法(如调用manager ...