【刷题】BZOJ 4195 [Noi2015]程序自动分析

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 5.5 安装配置方法图文教程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 回忆一下mysql 5.5 安装配置方法&#xff0c;整理mysql 5.5 安装配置教程笔记&#xff0c;分享给大家。 MySQL下载地址&#xff1a;htt…

git解除与远程分支的关联

在工作中&#xff0c;经常需要将同一份代码传到不同的git仓库中去 如果本地同样一份代码&#xff0c;已经关联了一个与远程分支&#xff0c;那么怎么才能解除原程分支&#xff0c;并关联到一个新的分支将代码提交到新的分支上去呢&#xff1f; 1、如果你已经在远程创建了一个分…

FindWindow用法

函数功能&#xff1a;该函数获得一个顶层窗口的句柄&#xff0c;该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。 函数型&#xff1a;HWND FindWindow&#xff08;LPCTSTR IpClassName&#xff0c;LPCTSTR IpWindowName&#xff0…

中国大城市政治地位综合实力排名

中国大城市政治地位综合实力排名&#xff01; 中国大城市政治地位综合实力排名&#xff01;政治地位: 政治地位: 1&#xff08;直辖市 4 个&#xff09;&#xff1a;上海、北京、天津、重庆 2&#xff08;副省级城市 15 个&#xff09;&#xff1a;广州、深圳、武汉、南京、沈阳…

sourcemap总结

sourcemap在线上压缩文件调试中很重要&#xff0c;在此总结如下&#xff1a; 1. 开启sourcemap (1). 浏览器要开启source-map支持(2). 压缩文件底部要有source-map的URL&#xff0c;压缩要开启source-map(3). .map文件要放在服务器&#xff0c;source-map URL指向的位置 2. sou…

navicat 导出的sql文件,再导入,运行SQL文件成功,数据库中却没有表

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 问题描述&#xff1a;本来在数据库上右键 &#xff0c;运行SQL文件 &#xff0c;就可以导入 sql ,建表成功&#xff0c;并且数据也该的…

mysql索引之二级索引学习总结

二级索引又称辅助索引、非聚集索引(no-clustered index)。b&#xff0b;tree树结构。然而二级索引的叶子节点不保存记录中的所有列&#xff0c;其叶子节点保存的是<健值&#xff0c;(记录)地址>。好似聚集索引中非叶子节点保存的信息&#xff0c;不同的是二级索引保存的是…

264,avs中Skip宏块与Direct预测模式 ,对称模式的区别

1. B_Skip类型宏块 &#xff1a;无像素残差&#xff0c;无运动矢量残差&#xff08;MVD&#xff09;和参考帧。解码时&#xff0c;通过Direct预测模式&#xff08;时间或空间&#xff09;计算出前、后向MV后&#xff0c;直接利用前、后向MV得到像素预测值。像 素重构值像…

【hdu 6444】Neko's loop

【链接】 我是链接,点我呀:) 【题意】 给你一个序列. 你可以选择起点i。 然后每次往右跳k次。 得到下一个值a[ik];。 问你跳m次能得到的最大值ma是多少。 如果>s输出0 否则输出s-ma; 【题解】 最后肯定会形成gcd(n,k)个环的。 对于每个环(长度为cnt。 预处理出从1..2cnt的…

高性能MySQL之Count统计查询

近一段时间&#xff0c;有同事问我 “MySQL执行count很慢&#xff0c;有没有什么优化的空间”。当时在忙&#xff0c;就回复了一句“innodb里面count统计都是实时统计&#xff0c;慢一些是正常的”&#xff0c; 周末闲暇下来&#xff0c;想到以前有好多人都问过关于count的问题…

js转换字符串为base64位

在window对象下有两个api,可以对ASCII编码进行编译,得到base64位的字符串 btoa:编码为base64atob:解码为ASCII码此种方法不能对中文进行操作,因为ASCII码中没有中文,如果编码会得到乱码 要编码中文可以先用encodeURIComponent() 对字符串进行转义,转义后再btoa()成base64就可以…

java 文件下载,中文表名,中文内容

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 RequestMapping("userDownloadTemplet")private void userDownloadTemplet(HttpServletRequest request,HttpServletResponse …

cherry-pick的用法

简述 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如&#xff0c;假设我们有个稳定版本的分支&#xff0c;叫v2.0&#xff0c;另外还有个开发版本的分支v3.0&#xff0c;我们不能直接把两个分支合并&#xff0c;这样会导致稳定版本混乱&#xff0c…

Docker 二进制安装docker

https://blog.csdn.net/bruce_yds/article/details/80035714转载于:https://www.cnblogs.com/Presley-lpc/p/9698724.html

264,avs重要的变量:

B帧&#xff1a; B8pdir[i] i为0,1,2,3&#xff1b;值的含义&#xff1a;0&#xff1a;前向 &#xff1b;1&#xff1a;后向&#xff1b;2&#xff1a;双向&#xff1b;如果为intra_block,则为-1. B8mode[i] i为0,1,2,3 &#xff0c;值的含义&#xff1a;1:16x16 2:16x8 3…

insert into 语句的三种写法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 insert into 语句的三种写法 方式1、 INSERT INTO t1(field1,field2) VALUE(v001,v002); // 明确只插入一条Value 方式2、 IN…

Linux系统中跟TCP相关的内核参数

1. TCP保活机制 参考 《Nginx(三) 配置文件详解 - 基础模块》3.18章节 net.ipv4.tcp_keepalive_intvl&#xff1a;设置两次相邻探活检测的间隔时间。默认是75秒&#xff0c;单位是秒。net.ipv4.tcp_keepalive_probes&#xff1a;设置探活最多检测次数。默认是9次&#xff0c;单…

ECMAScript3中数组方法

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>ECMAScript3中数组方法</title></head><body><script>//字符串和数组之间相转换的方法 1.join() split() /*var str abcdefg…

implements Serializable

Serializable是一个对象序列化的接口&#xff0c;一个类只有实现了Serializable接口&#xff0c;它的对象才是可序列化的。因此如果要序列化某些类的对象&#xff0c;这些类就必须实现Serializable接口。而实际上&#xff0c;Serializable是一个空接口&#xff0c;没有什么具体…

Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)

题意 给你 \(n\) 个武器&#xff0c;\(m\) 个敌人&#xff0c;问你最多消灭多少个敌人&#xff0c;并输出方案。 总共有三种武器。 SQL 火箭 - 能消灭给你集合中的一个敌人 \(\sum |S| \le 100000\) &#xff1b;认知光束 - 可以消灭 \([l, r]\) 区间中的一个敌人&#xff1b;O…