【bzoj4195】[Noi2015]程序自动分析 离散化+并查集
题目描述
在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。
输入
输入文件的第1行包含1个正整数t,表示需要判定的问题个数。注意这些问题之间是相互独立的。
输出
输出文件包括t行。
样例输入
2
2
1 2 1
1 2 0
2
1 2 1
2 1 1
样例输出
NO
YES
题解
并查集
由于题目没有像某食物链一样规定了顺序,只是问能否同时全部成立。
所以可以随意的改变条件的顺序。
那我们就可以先把所有相等关系的条件挑出来,并在并查集中合并。
然后再判定所有的不等关系,看它们的祖先是否相同。
然而题目中i和j的值太大,所以需要离散化,方法有多种,不多说了。
#include <cstdio>
#include <algorithm>
using namespace std;
struct data
{
int num , p;
}v[2000010];
int f[2000010] , q[2000010] , e[1000010] , tot;
int find(int x)
{
return x == f[x] ? x : f[x] = find(f[x]);
}
void merge(int x , int y)
{
int tx = find(x) , ty = find(y);
f[tx] = ty;
}
bool cmp(data a , data b)
{
return a.num < b.num;
}
int main()
{
int t;
scanf("%d" , &t);
while(t -- )
{
int n , i , flag = 1;
tot = 0;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ )
{
scanf("%d%d%d" , &v[i].num , &v[i + n].num , &e[i]);
v[i].p = i;
v[i + n].p = i + n;
}
sort(v + 1 , v + 2 * n + 1 , cmp);
for(i = 1 ; i <= 2 * n ; i ++ )
{
if(v[i].num != v[i - 1].num) tot++;
q[v[i].p] = tot;
}
for(i = 1 ; i <= tot ; i ++ )
f[i] = i;
for(i = 1 ; i <= n ; i ++ )
if(e[i] == 1)
merge(q[i] , q[i + n]);
for(i = 1 ; i <= n ; i ++ )
{
if(!e[i] && find(q[i]) == find(q[i + n]))
{
flag = 0;
break;
}
}
printf("%s\n" , flag ? "YES" : "NO");
}
return 0;
}
【bzoj4195】[Noi2015]程序自动分析 离散化+并查集的更多相关文章
- P1955 [NOI2015]程序自动分析[离散化+并查集]
大水题一道,不明白为什么你谷评了个蓝.一看就是离散化,先去满足相等的条件,相等即为两点联通,或者说在同一个集合内.再看不相等,只有两元素在同一集合才不满足.裸的disjoint-set直接上,常数巨大 ...
- [NOI2015]程序自动分析(并查集,离散化)
[NOI2015]程序自动分析 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,-代表程序中出现的 ...
- [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< ...
- 【BZOJ4195】【NOI2015】程序自动分析(并查集)
[BZOJ4195][NOI2015]程序自动分析(并查集) 题面 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设 ...
- [UOJ#127][BZOJ4195][NOI2015]程序自动分析
[UOJ#127][BZOJ4195][NOI2015]程序自动分析 试题描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2, ...
- BZOJ4195 [Noi2015]程序自动分析(离散化+并查集)
4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 689 Solved: 296 [Submit][Sta ...
- BZOJ4195 NOI2015 程序自动分析
4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Description 在实现程序自动分析的过程中,常常需要判定一些约束条件 ...
随机推荐
- 【转】Odoo装饰器: one装饰
one装饰器的作用是对每一条记录都执行对应的方法,相当于traditional-style中的function,无返回值! 应用举例: 定义的columns now = fields.Datetime ...
- P1060 开心的金明
P1060 开心的金明 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要 ...
- Java:List判空的条件:List=null 和 List.size = 0
当需要对一个LIst进行判空操作时我们可使用如下两个语句: if (list == null || list.size() == 0) {} if (list != null && l ...
- Java String 字符串类细节探秘
一. 字符串基本知识要点 字符串类型String是Java中最常用的引用类型.我们在使用Java字符串的时候,通常会采用两种初始化的方式:1. String str = "Hello Wor ...
- 怎样下载JDBC驱动
MySQL官网: https://www.mysql.com/ 请注意: 需要把mysql-connector-java-5.1.45-bin.jar放到C:\JMeter\apache-jmeter ...
- vue watch监控对象
1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console. ...
- (python)leetcode刷题笔记05 Longest Palindromic Substring
5. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You ...
- DeepLearning - Forard & Backward Propogation
In the previous post I go through basic 1-layer Neural Network with sigmoid activation function, inc ...
- js中的数组对象排序
一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var ar ...
- 浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(转载)
转载来至beautifulzzzz,网址http://www.cnblogs.com/zjutlitao/,推荐学习 蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到 ...