题目描述

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

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

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

输入输出格式

输入格式:

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

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

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

输出格式:

输出文件包括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

输入样例#2:

2
3
1 2 1
2 3 1
3 1 1
4
1 2 1
2 3 1
3 4 1
1 4 0

输出样例#2:

YES
NO

思路:

首先将所有的 e=1 的操作放在前面,当进行 e=1 的操作时,只要将他约束的两个变量放在同一个集合中即可,然后再进行 e=0 的操作,当 e=0 时,对于他约束的两个变量,如果在同一个集合中,就不可能满足,输出 NO,若不在同一个集合中,输出 YES

由于数据范围达到 1E9,直接开 1E9 的 father 数组是不现实的,因此需要进行离散化

源代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-9
#define INF 0x3f3f3f3f
#define LL long long
const int MOD=10007;
const int N=1000000+5;
const int dx[]= {-1,1,0,0};
const int dy[]= {0,0,-1,1};
using namespace std;
struct Node{int a,b;int op;//操作符bool operator < (const Node &rhs)const{//按操作排序return op>rhs.op;}
}a[N];
int father[N];
int Rank[N*2];
int Find(int x){if(x==father[x])return x;return father[x]=Find(father[x]);
}
void Union(int x,int y){x=Find(x);y=Find(y);if(x!=y)father[x]=y;
}
int main(){int t;scanf("%d",&t);while(t--){memset(Rank,0,sizeof(Rank));int n;scanf("%d",&n);int cnt=1;for(int i=1;i<=n;i++){scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].op);Rank[cnt++]=a[i].a;Rank[cnt++]=a[i].b;}cnt--;//离散化sort(Rank+1,Rank+cnt+1);int len=unique(Rank+1,Rank+cnt+1)-Rank;for(int i=1;i<=n;i++){a[i].a=lower_bound(Rank,Rank+len,a[i].a)-Rank;a[i].b=lower_bound(Rank,Rank+len,a[i].b)-Rank;}for(int i=1;i<=len;i++)//初始化father[i]=i;sort(a+1,a+n+1);//按op排序bool flag=true;for(int i=1;i<=n;i++){int x=Find(a[i].a);int y=Find(a[i].b);if(a[i].op==1){//合并Union(x,y);}else{//查询if(x==y){flag=false;printf("NO\n");break;}}}if(flag)printf("YES\n");}return 0;
}

程序自动分析(洛谷-P1955)相关推荐

  1. 并查集——程序自动分析(洛谷 P1955)

    题目选自洛谷P1955 比较复杂一点的并查集题目,还用到了离散化的思想 首先明确一点:相等具有传递性,不相等不具有传递性(Eg:若x1等于x2,x2等于x3时,显然x1=x3.但当x1不等于x2,x2 ...

  2. 洛谷 P1955 [NOI2015]程序自动分析(沙雕题)

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

  3. P1955 [NOI2015]程序自动分析 离散化学习 lower_bound学习

    题目链接 https://www.luogu.org/problemnew/show/P1955 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题 ...

  4. 【洛谷】地球人口承载力估计【C语言程序】

    题目:地球人口承载力估计 这道题发现在洛谷上没有C语言解法,故在此写下个人的C语言解法,供大家参考 题目描述 假设地球上的新生资源按恒定速度增长.照此测算,地球上现有资源加上新生资源可供x亿人生活a年 ...

  5. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  6. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  7. 洛谷专题训练 ——【算法1-1】模拟与高精度

    洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...

  8. 洛谷 P1219 八皇后

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

  9. DP【洛谷P2134】 百日旅行

    [洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...

最新文章

  1. Kubernetes Eviction Manager工作机制分析
  2. 嵌入式开发中使用DDD进行调试
  3. php data 算出差几天,出差天数一般怎么算。。。
  4. 动态创建 Plist 文件
  5. 多态情况下,怎么用基类指针去访问基类的虚函数?
  6. 巴菲特:比特币纯粹是FOMO(害怕错过)
  7. 百度地图开发实例文章(一)
  8. linux内核zfs,Linus Torvalds 不建议使用 ZFS On Linux
  9. 【Python实例第14讲】普通判别分析与缩水判别分析
  10. 三星 9810 android 9,【极光ROM】-【三星NOTE9 N960X-9810】-【V17.0 Android-Q-TB9】
  11. 用Python做图片分类:前置处理,图片的缩小保存
  12. 「数据架构」什么是实体关系图(ERD)?
  13. 【Linux】【RedHat】下载 安装 注册
  14. 7.20-7.26 字节推荐算法(DATA-EDU)5道面试题分享
  15. 深入浅出Mybatis-分页
  16. POP3, SMTP, IMAP 和 Exchange 的区别
  17. 8.房价预测基础线性回归
  18. 为开源新时代赋能 2021开源科技节完美落幕
  19. 用友优普孙永军:制造业的三座“大山”
  20. 21天边唱边学 拯救你的英语听说

热门文章

  1. CP-ABE公式推导笔记
  2. 那两个告扎克伯格抄袭的斜杠青年,后来怎么样了?
  3. 用python爬虫爬取无水印图片_使用python 爬虫,爬取图片
  4. 用hundred造句子_2020朋友圈感恩节祝福语大全:微信感恩节鞠躬的图片文案句子说说[多图]...
  5. Redis 分布式锁遇到的序列化问题
  6. “彪悍人生”罗永浩被法院限制消费,网友:期待王者归来
  7. Jeewx-Enterprise_1.1版本发布,开源微信企业号开发平台
  8. Essentials of Deep Learning: Visualizing Convolutional Neural Networks in Python
  9. 图像处理经典文章合集
  10. filebeat + es 日志分析