程序自动分析

描述

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

考虑一个约束满足问题的简化版本:假设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

输入样例:

  1. 2
  2. 2
  3. 1 2 1
  4. 1 2 0
  5. 2
  6. 1 2 1
  7. 2 1 1

输出样例:

  1. NO
  2. YES

题解:

相等就加入集合,不相等就存起来;

最后判断一下不相等的是否在一个集合;

代码:

  1. #include<iostream>
  2. #include<cstdio> //EOF,NULL
  3. #include<cstring> //memset
  4. #include<cstdlib> //rand,srand,system,itoa(int),atoi(char[]),atof(),malloc
  5. #include<cmath> //ceil,floor,exp,log(e),log10(10),hypot(sqrt(x^2+y^2)),cbrt(sqrt(x^2+y^2+z^2))
  6. #include<algorithm> //fill,reverse,next_permutation,__gcd,
  7. #include<string>
  8. #include<vector>
  9. #include<queue>
  10. #include<stack>
  11. #include<utility>
  12. #include<iterator>
  13. #include<iomanip> //setw(set_min_width),setfill(char),setprecision(n),fixed,
  14. #include<functional>
  15. #include<map>
  16. #include<set>
  17. #include<limits.h> //INT_MAX
  18. #include<bitset> // bitset<?> n
  19. using namespace std;
  20.  
  21. typedef long long LL;
  22. typedef long long ll;
  23. typedef pair<int,int> P;
  24. #define all(x) x.begin(),x.end()
  25. #define readc(x) scanf("%c",&x)
  26. #define read(x) scanf("%d",&x)
  27. #define read2(x,y) scanf("%d%d",&x,&y)
  28. #define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
  29. #define print(x) printf("%d\n",x)
  30. #define mst(a,b) memset(a,b,sizeof(a))
  31. #define lowbit(x) x&-x
  32. #define lson(x) x<<1
  33. #define rson(x) x<<1|1
  34. #define pb push_back
  35. #define mp make_pair
  36. const int INF =0x3f3f3f3f;
  37. const int mod = 1e9+;
  38. const int MAXN = + ;
  39. int tot,cnt,flag;
  40. int t,n;
  41. int a,b,c;
  42. int pre[MAXN * ];
  43. int wrong1[MAXN],wrong2[MAXN];
  44. map<int,int> H;
  45. int mapping(int x)
  46. {
  47. if (H.count(x)) return H[x];
  48. return H[x] = ++ cnt ;
  49. }
  50. int find(int x){
  51. return x == pre[x] ? x : pre[x] = find(pre[x]);
  52. }
  53. void join(int x,int y){
  54. if(find(x) != find(y)){
  55. pre[find(y)] = find(x);
  56. }
  57. }
  58. int main(){
  59. read(t);
  60. while(t--){
  61. cnt = ;
  62. tot = ;
  63. memset(wrong1,,sizeof wrong1);
  64. memset(wrong2,,sizeof wrong2);
  65. read(n);
  66. for(int i = ;i <= n * ; i++)
  67. pre[i] = i ;
  68. H.clear();
  69. for(int i = ; i < n; i++){
  70. read3(a,b,c);
  71. a = mapping(a) ;
  72. b = mapping(b);
  73. if(c) {
  74. join(a,b);
  75. }
  76. else{
  77. wrong1[tot] = a, wrong2[tot] = b;
  78. tot++;
  79. }
  80. }
  81. flag = ;
  82. for(int i = ; i < tot; i++){
  83. if(find(wrong1[i]) == find(wrong2[i])){
  84. flag = ;
  85. break;
  86. }
  87. }
  88. if(flag) printf("YES\n");
  89. else printf("NO\n");
  90. }
  91. }

237. 程序自动分析 【map+并查集】的更多相关文章

  1. 【BZOJ4195】【NOI2015】程序自动分析(并查集)

    [BZOJ4195][NOI2015]程序自动分析(并查集) 题面 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设 ...

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

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

  3. [NOI2015]程序自动分析(并查集)

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

  4. 【luoguP1955 】[NOI2015]程序自动分析--普通并查集

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

  5. bzoj 4195: [Noi2015]程序自动分析【并查集】

    等于有传递性,所以hash一下把等于用并查集连起来,然后再判断不等于是否合法即可 #include<iostream> #include<cstdio> #include< ...

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

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

  7. [NOI2015]程序自动分析(并查集,离散化)

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

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

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

  9. P1955 [NOI2015]程序自动分析[离散化+并查集]

    大水题一道,不明白为什么你谷评了个蓝.一看就是离散化,先去满足相等的条件,相等即为两点联通,或者说在同一个集合内.再看不相等,只有两元素在同一集合才不满足.裸的disjoint-set直接上,常数巨大 ...

随机推荐

  1. c# Mongodb创建自增列

    MongoCollection<BsonDocument> tblCount; if (!db.CollectionExists(tblCountName))            {   ...

  2. C#6.0中10大新特性的应用和总结

    微软发布C#6.0.VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家.   微软于2015年7月21日发布了Visual Studio 20 ...

  3. 去掉idea中竖线

    1.现象如下: 2.解决办法. 3.解决后如下:

  4. [Unit Test] Unit Test Brief Introduction

    Levels of Testing- Acceptance- Performance- Functional- Integration- Unit Why Unit Testing- Feedback ...

  5. ruby自动化之selenium webGUI

    1.下载ruby语言包,windows下需要安装rubyinstall http://railsinstaller.org/en 2.cmd命令下安装selenium-webdriver gem包 g ...

  6. ASCII 码

    http://baike.baidu.com/link?url=Y4crTsVq678Z8fr92DAGIrqVHoexVXsMc-WKBMVUKGDq4KbEOuhWbUQXuQEtnlom4yln ...

  7. python os.path.dirname()

    ----返回文件所在的路径 ----如果path变量直接是文件名则返回空

  8. jquery遍历获取每一行数据进行对比

    $("#dtlTable tr:gt(0)").each(function(i){ var orderQtyBy = $("input[name='orderQtyBys ...

  9. sparkStreaming插入mysql 必须考虑到实时更新老的key

    原先使用批次提交更新 但数据库无变化,不得不一条一条的插入 公司数据量不大  还未做数据量大的测试 但实时更新是可以的 关键sql : insert into area_user_amt (date, ...

  10. Django后端项目---- Rest Framework(2)

    一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import API ...