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≤1000000

1≤i,j≤1000000000

Solution

水题一道
由于等号具有连续性,所以先处理所有相等的限制,用并查集维护哪些是相等的
然后判断不等号,如果有不等号两边在同一并查集内,显然就不行

#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
#define REP(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
#define DEP(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
const int MAXN=400000+10;
int T,n,fa[MAXN],lt;
std::vector<int> V;
std::map<int,int> M;
struct node{int x,y,opt;inline bool operator < (const node &A) const {return opt>A.opt;};
};
node limit[MAXN];
template<typename T> inline void read(T &x)
{T data=0,w=1;char ch=0;while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();if(ch=='-')w=-1,ch=getchar();while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void discretization()
{V.clear();M.clear();REP(i,1,n)V.push_back(limit[i].x),V.push_back(limit[i].y);std::sort(V.begin(),V.end());V.erase(std::unique(V.begin(),V.end()),V.end());REP(i,0,V.size()-1)M[V[i]]=i+1;lt=V.size();REP(i,1,n)limit[i].x=M[limit[i].x],limit[i].y=M[limit[i].y];
}
inline int found(int x)
{if(fa[x]!=x)fa[x]=found(fa[x]);return fa[x];
}
int main()
{read(T);while(T--){read(n);REP(i,1,n){int x,y,opt;read(x);read(y);read(opt);limit[i]=(node){x,y,opt};}discretization();std::sort(limit+1,limit+n+1);REP(i,1,lt)fa[i]=i;int mk=1;REP(i,1,n){int u=limit[i].x,v=limit[i].y;if(limit[i].opt)fa[found(u)]=found(v);else if(found(u)==found(v)){mk=0;break;}}puts(mk?"YES":"NO");}return 0;
}

转载于:https://www.cnblogs.com/hongyj/p/9688387.html

【刷题】BZOJ 4195 [Noi2015]程序自动分析相关推荐

  1. bzoj 4195: [Noi2015]程序自动分析

    4195: [Noi2015]程序自动分析 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,-代表 ...

  2. 使用 软考免费真题app刷题库 手机小程序版

    方案1: APP刷真题(免费真题app) 手机软件:软考题库(ios)/希赛软考助手(安卓版) 软考题库免费真题app,含有历年真题.模拟考试.高频考点.知识点整理,还有收藏功能,错题记录功能等等.有 ...

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

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

  4. 刷题一个4ms的程序,代码如何优化到3ms再到2ms?

    目录 前言 具体 结语 如果觉得本文有所帮助,记得点赞收藏! 前言 你在打王者荣耀的时候,是否经常会遇到这种情况:和对面同位置对线的时候,自己也没有太大失误,但是为啥对面经济比我高?能够压着我打?-- ...

  5. 掌中题库刷题神奇微信小程序介绍

    微信小程序无需安装.便于传播,安卓与ios平台都可以使用. "掌中题库"微信小程序,针对个人或单位用户进行复习备考.业务学习.党建活动.继续教育而设计. 程序功能实用,界面简约,尤 ...

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

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

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

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

  8. bzoj4195 [Noi2015]程序自动分析

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

  9. [NOI2015]程序自动分析

    题解:并查集,因为数据比较大嘛,你要是想再所以如果开1e9的数组大小,那毫无疑问,基佬紫等着你. 所以这个题离散化用了map这个容器. 首先,遍历一遍e=1的时候,把他们之间相等的都给连到同一个集合里 ...

最新文章

  1. 基于OpenCV 的车牌识别
  2. 轻量型「孟子」模型比肩千亿大模型!AI大牛周明率队刷新CLUE新纪录
  3. 浅析网站如何才能最大化获得用户访问量?
  4. android自定义布局的使用!
  5. 控制台调用win32 API 示例二则
  6. 文本编辑器实现跳转到指定行的功能
  7. 机房收费--组合查询
  8. ABAP动态生成经典应用之Dynamic SQL Excute 程序
  9. 在线旅游的2020:洗牌重组、直播自救、跨界面敌
  10. POJ 1611 The Suspects (并查集)
  11. 苹果Mac定制化App开发神器:​​​​FileMaker
  12. 商务邮箱有哪些?常见邮箱对比
  13. NOI题库练习1.5(38)
  14. EMC与电阻、电容和电感的关系
  15. Pycharm Debug调试(纯干货)
  16. 微信开发工具新版本黑屏的解决办法
  17. java jmf 教程_JMF入门(Java Media Framework)
  18. .NET 6 实现滑动验证码(七)、生成验证码
  19. 简单了解pgpool
  20. HNUST OJ 2106 普通电梯

热门文章

  1. python爬取文件归类_python爬取各类文档方法归类汇总
  2. 【CodeForces - 483C】Diverse Permutation(思维构造)
  3. 【HDU - 1847】Good Luck in CET-4 Everybody! (巴什博奕,PN图或sg函数)
  4. 【CodeForces - 574D】Bear and Blocks (dp,思维)
  5. 【HDU - 1266 】Reverse Number(模拟,数字分位数处理)
  6. android 存储不被垃圾清理,手机内存足够大,就不需要清理垃圾了?你错了!
  7. codesys 串口通讯实例_常见的PLC程序实例,车库自动门的PLC控制!
  8. 两组的数据平均值合并_不要进入数据陷进
  9. python买东西_Python实战之ATM+购物车
  10. android6.0 sd卡卸载api,android6.0 用户关掉sd卡读取权限的情况下, 还能做到手机缓存么?...