237. 程序自动分析 【map+并查集】
程序自动分析
描述
在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。
考虑一个约束满足问题的简化版本:假设x1,x2,x3,…x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xjxi=xj或xi≠xjxi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。
例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。
现在给出一些约束满足问题,请分别对它们进行判定。
输入格式
输入文件的第1行包含1个正整数t,表示需要判定的问题个数,注意这些问题之间是相互独立的。
对于每个问题,包含若干行:
第1行包含1个正整数n,表示该问题中需要被满足的约束条件个数。
接下来n行,每行包括3个整数i,j,e,描述1个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1,则该约束条件为xi=xjxi=xj;若e=0,则该约束条件为xi≠xjxi≠xj。
输出格式
输出文件包括t行。
输出文件的第k行输出一个字符串“YES”或者“NO”(不包含引号,字母全部大写),“YES”表示输入中的第k个问题判定为可以被满足,“NO”表示不可被满足。
数据范围
1≤n≤1000000
1≤i,j≤1000000000
输入样例:
2
2
1 2 1
1 2 0
2
1 2 1
2 1 1
输出样例:
NO
YES
题解:
相等就加入集合,不相等就存起来;
最后判断一下不相等的是否在一个集合;
代码:
- #include<iostream>
- #include<cstdio> //EOF,NULL
- #include<cstring> //memset
- #include<cstdlib> //rand,srand,system,itoa(int),atoi(char[]),atof(),malloc
- #include<cmath> //ceil,floor,exp,log(e),log10(10),hypot(sqrt(x^2+y^2)),cbrt(sqrt(x^2+y^2+z^2))
- #include<algorithm> //fill,reverse,next_permutation,__gcd,
- #include<string>
- #include<vector>
- #include<queue>
- #include<stack>
- #include<utility>
- #include<iterator>
- #include<iomanip> //setw(set_min_width),setfill(char),setprecision(n),fixed,
- #include<functional>
- #include<map>
- #include<set>
- #include<limits.h> //INT_MAX
- #include<bitset> // bitset<?> n
- using namespace std;
- typedef long long LL;
- typedef long long ll;
- typedef pair<int,int> P;
- #define all(x) x.begin(),x.end()
- #define readc(x) scanf("%c",&x)
- #define read(x) scanf("%d",&x)
- #define read2(x,y) scanf("%d%d",&x,&y)
- #define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
- #define print(x) printf("%d\n",x)
- #define mst(a,b) memset(a,b,sizeof(a))
- #define lowbit(x) x&-x
- #define lson(x) x<<1
- #define rson(x) x<<1|1
- #define pb push_back
- #define mp make_pair
- const int INF =0x3f3f3f3f;
- const int mod = 1e9+;
- const int MAXN = + ;
- int tot,cnt,flag;
- int t,n;
- int a,b,c;
- int pre[MAXN * ];
- int wrong1[MAXN],wrong2[MAXN];
- map<int,int> H;
- int mapping(int x)
- {
- if (H.count(x)) return H[x];
- return H[x] = ++ cnt ;
- }
- int find(int x){
- return x == pre[x] ? x : pre[x] = find(pre[x]);
- }
- void join(int x,int y){
- if(find(x) != find(y)){
- pre[find(y)] = find(x);
- }
- }
- int main(){
- read(t);
- while(t--){
- cnt = ;
- tot = ;
- memset(wrong1,,sizeof wrong1);
- memset(wrong2,,sizeof wrong2);
- read(n);
- for(int i = ;i <= n * ; i++)
- pre[i] = i ;
- H.clear();
- for(int i = ; i < n; i++){
- read3(a,b,c);
- a = mapping(a) ;
- b = mapping(b);
- if(c) {
- join(a,b);
- }
- else{
- wrong1[tot] = a, wrong2[tot] = b;
- tot++;
- }
- }
- flag = ;
- for(int i = ; i < tot; i++){
- if(find(wrong1[i]) == find(wrong2[i])){
- flag = ;
- break;
- }
- }
- if(flag) printf("YES\n");
- else printf("NO\n");
- }
- }
237. 程序自动分析 【map+并查集】的更多相关文章
- 【BZOJ4195】【NOI2015】程序自动分析(并查集)
[BZOJ4195][NOI2015]程序自动分析(并查集) 题面 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设 ...
- 【bzoj4195】[Noi2015]程序自动分析 离散化+并查集
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...
- [NOI2015]程序自动分析(并查集)
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...
- 【luoguP1955 】[NOI2015]程序自动分析--普通并查集
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...
- bzoj 4195: [Noi2015]程序自动分析【并查集】
等于有传递性,所以hash一下把等于用并查集连起来,然后再判断不等于是否合法即可 #include<iostream> #include<cstdio> #include< ...
- 洛谷P1955 程序自动分析 [NOI2015] 并查集
正解:并查集+离散化 解题报告: 传送门! 其实题目还挺水的,,,但我太傻逼了直接想挂了,,,所以感觉还是有个小坑点所以还是写个题解记录下我的傻逼QAQ 首先这题一看,就长得很像NOIp关押罪犯?然后 ...
- [NOI2015]程序自动分析(并查集,离散化)
[NOI2015]程序自动分析 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,-代表程序中出现的 ...
- NOI2015 洛谷P1955 程序自动分析(并查集+离散化)
这可能是我目前做过的最简单的一道noi题目了...... 先对e=1的处理,用并查集:再对e=0查询,如果这两个在同一集合中,则为""NO",最后都满足的话输出" ...
- P1955 [NOI2015]程序自动分析[离散化+并查集]
大水题一道,不明白为什么你谷评了个蓝.一看就是离散化,先去满足相等的条件,相等即为两点联通,或者说在同一个集合内.再看不相等,只有两元素在同一集合才不满足.裸的disjoint-set直接上,常数巨大 ...
随机推荐
- c# Mongodb创建自增列
MongoCollection<BsonDocument> tblCount; if (!db.CollectionExists(tblCountName)) { ...
- C#6.0中10大新特性的应用和总结
微软发布C#6.0.VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家. 微软于2015年7月21日发布了Visual Studio 20 ...
- 去掉idea中竖线
1.现象如下: 2.解决办法. 3.解决后如下:
- [Unit Test] Unit Test Brief Introduction
Levels of Testing- Acceptance- Performance- Functional- Integration- Unit Why Unit Testing- Feedback ...
- ruby自动化之selenium webGUI
1.下载ruby语言包,windows下需要安装rubyinstall http://railsinstaller.org/en 2.cmd命令下安装selenium-webdriver gem包 g ...
- ASCII 码
http://baike.baidu.com/link?url=Y4crTsVq678Z8fr92DAGIrqVHoexVXsMc-WKBMVUKGDq4KbEOuhWbUQXuQEtnlom4yln ...
- python os.path.dirname()
----返回文件所在的路径 ----如果path变量直接是文件名则返回空
- jquery遍历获取每一行数据进行对比
$("#dtlTable tr:gt(0)").each(function(i){ var orderQtyBy = $("input[name='orderQtyBys ...
- sparkStreaming插入mysql 必须考虑到实时更新老的key
原先使用批次提交更新 但数据库无变化,不得不一条一条的插入 公司数据量不大 还未做数据量大的测试 但实时更新是可以的 关键sql : insert into area_user_amt (date, ...
- Django后端项目---- Rest Framework(2)
一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import API ...