题目描述

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

考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x4≠x1,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。

现在给出一些约束满足问题,请分别对它们进行判定。

输入输出格式

输入格式:

从文件prog.in中读入数据。

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

对于每个问题,包含若干行:

第1行包含1个正整数n,表示该问题中需要被满足的约束条件个数。接下来n行,每行包括3个整数i,j,e,描述1个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1,则该约束条件为xi=xj;若�e=0,则该约束条件为xi≠xj;

输出格式:

输出到文件 prog.out 中。

输出文件包括t行。

输出文件的第 k行输出一个字符串“ YES” 或者“ NO”(不包含引号,字母全部大写),“ YES” 表示输入中的第k个问题判定为可以被满足,“ NO” 表示不可被满足。

输入输出样例

输入样例#1:

2
2
1 2 1
1 2 0
2
1 2 1
2 1 1
输出样例#1:

NO
YES

说明

【样例解释1】

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

在第二个问题中,约束条件为:x1=x2,x1=x2。这两个约束条件是等价的,可以被同时满足。

【样例说明2】

在第一个问题中,约束条件有三个:x1=x2,x2=x3,x3=x1。只需赋值使得x1=x1=x1,即可同时满足所有的约束条件。

在第二个问题中,约束条件有四个:x1=x2,x2=x3,x3=x4,x4≠x1。由前三个约束条件可以推出x1=x2=x3=x4,然而最后一个约束条件却要求x1≠x4,因此不可被满足。

【数据范围】

【时限2s,内存512M】

尽量不要用map map常数比较大

并查集+离散化

屠龙宝刀点击就送

#include <algorithm>
#include <cstring>
#include <cstdio>
#include <map> using namespace std;
int num,T,cnt,fa[],c[];
struct node
{
int a,b,c;
}e[];
bool flag=false;
int find_fa(int x){return x==fa[x]?x:fa[x]=find_fa(fa[x]);}
void qr(int &x)
{
x=;bool f=;
char ch=getchar();
while(ch>''||ch<'')
{
if(ch=='-') f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+(int)ch-;
ch=getchar();
}
x=f?(~x)+:x;
}
int main(int argc,char *argv[])
{
qr(T);
for(int n;T--;)
{
qr(n);
cnt=;num=;flag=false;
for(int i=;i<=n*;i++) fa[i]=i;
for(int i=;i<=n;i++)
{
qr(e[i].a);qr(e[i].b);qr(e[i].c);
c[++cnt]=e[i].a;
c[++cnt]=e[i].b;
}
sort(c+,c++cnt);
int size=unique(c+,c++cnt)-c-;
for(int i=;i<=n;i++)
{
e[i].a=lower_bound(c+,c++size,e[i].a)-c;
e[i].b=lower_bound(c+,c++size,e[i].b)-c;
}
for(int i=;i<=n;i++)
{
if(e[i].c==)
{
int fx=find_fa(e[i].a),fy=find_fa(e[i].b);
if(fx!=fy) fa[fy]=fx;
}
}
for(int i=;i<=n;i++)
{
if(!e[i].c)
{
int fx=find_fa(e[i].a),fy=find_fa(e[i].b);
if(fx==fy)
{
printf("NO\n");
flag=;
break;
}
}
}
if(!flag) printf("YES\n");
}
return ;
}

洛谷 P1955 程序自动分析的更多相关文章

  1. codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析

    4600 [NOI2015]程序自动分析  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 在实现 ...

  2. 洛谷P1955 程序自动分析 [NOI2015] 并查集

    正解:并查集+离散化 解题报告: 传送门! 其实题目还挺水的,,,但我太傻逼了直接想挂了,,,所以感觉还是有个小坑点所以还是写个题解记录下我的傻逼QAQ 首先这题一看,就长得很像NOIp关押罪犯?然后 ...

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

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

  4. 洛谷 [P1995] 程序自动分析

    并查集+ 离散化 首先本题的数据范围很大,需要离散化, STL离散化代码: //dat是原数据,id是编号,sub是数据的副本 sort(sub + 1, sub + tot + 1); size = ...

  5. 洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]

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

  6. 洛谷p1955[NOI2015]程序自动分析

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

  7. 程序自动分析(NOI2015)(洛谷P1955)题解

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

  8. 洛谷 P1955 [NOI2015]程序自动分析 题解

    每日一题 day22 打卡 Analysis 离散化+并查集 先离散化所有的约束条件,再处理所有e=1的条件,将i的祖先和j的祖先合并到一个集合中:e=0时,如果i的祖先与j的祖先在同一个集合中,说明 ...

  9. 【做题笔记】洛谷P1955[NOI2015]程序自动分析

    第一道蓝题祭- 注意到本题中判断的是下标,即,并不是真的判断 \(i\) 是否等于 \(j\) 显然考虑并查集,把所有标记为"相等"的数放在一个集合里,然后最后扫一遍每个数,如果有 ...

随机推荐

  1. C++ main函数中参数argc和argv含义及用法

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  2. 并不对劲的bzoj4804:欧拉心算

    题目大意 \(t\)(\(t\leq5000\))组询问,每次询问给出\(n\)(\(n\leq10^7\)),求: \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(gcd(i, ...

  3. BZOJ_3063_[Usaco2013]Route Designing_DP

    BZOJ_3063_[Usaco2013]Route Designing_DP Description After escaping from the farm, Bessie has decided ...

  4. NOIP提高组2006-金明的预算方案

    链接 分析:依赖型0-1背包问题,对于一个主件,可以挂0个,1个,2个附件,所以最终为4种状态情况下的最大值. #include "iostream" #include " ...

  5. 区间DP中的环形DP

    vijos1312 链接:www.vijos.org/p/1312 题目分析:经典的环形DP(区间DP) 环形DP,首先解环过程,把数组复制一遍,n个数变成2n个数,从而实现解环 dp[i][j]表示 ...

  6. 如何生成Android的keystore文件

    步骤   1 找到本机电脑上jdk安装的目录,使用cmd命令打开命令窗口,输入cd  jdk目录(替换成你的jdk的bin目录),进入到jdk的bin目录,接下来你才可以使用jdk的命令进行操作 步骤 ...

  7. ASP.NET Core:WebAppCoreAngular

    ylbtech-ASP.NET Core:WebAppCoreAngular 1.返回顶部 1. 2. 3. 4. 5. 6. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部   ...

  8. UIAlterController 的使用

    相对于IOS8.4之后苹果对提示框做了进一步的封装,这将与之前的提示框有很大的同. 之前的 UIAlterView  是弹出一个提示框. 而今天学习的提示框是 通过视图控制器进行弹出,这就意味着,我们 ...

  9. View Controller Programming Guide for iOS---(八)---Using View Controllers in the Responder Chain

    Using View Controllers in the Responder Chain 响应链中使用视图控制器 View controllers are descendants of the UI ...

  10. 037--pymysql和SQLAchemy

    一.pymysql操作 1.执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysq ...