BZOJ4195 luoguP1955 NOI2015D1T1 程序自动分析
题意:给定n个(xi = xj) 或 (xi != xj) 的条件,问是否可能成立
BZOJ链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4195
luogu链接:https://www.luogu.org/problemnew/show/P1955
离散化+并查集
离线,先把(xi = xj)用并查集解决,再一个一个判断不等的是否矛盾
一开始用map离散化结果TLE
emm
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<vector> using namespace std; const int MAXN = ;
int n, kx;
int fa[MAXN * ], size[MAXN * ], s[MAXN * ];
vector< pair<int, int> > tf, li; template <typename tn> void read (tn & a) {
tn x = , f = ;
char c = getchar();
while (c < '' || c > ''){ if (c == '-') f = -; c = getchar(); }
while (c >= '' && c <= ''){ x = x * + c - ''; c = getchar(); }
a = f == ? x : -x;
} int find (int x) {
if (fa[x] == x) return x;
return fa[x] = find(fa[x]);
} void link (int x, int y) {
x = find(x);
y = find(y);
if (x == y) return;
if (size[x] > size[y]) { link(y, x); return; }
fa[x] = y;
size[y] += size[x];
} int ge (int x) {
int left = , right = kx + ;
while (left < right - ) {
int mid = (left + right) / ;
if (s[mid] > x) right = mid; else left = mid;
}
if (s[left] == x) return left; else return left + ;
} int main() {
int T;
read(T);
while (T--) {
read(n);
tf.clear(); li.clear();
for (int i = ; i <= n; ++i) {
int x, y, k;
read(x);
read(y);
read(k);
if (k == ) tf.push_back(make_pair(x, y)); else li.push_back((make_pair(x, y)));
s[i + i - ] = x;
s[i + i] = y;
}
sort(s + , s + n + n);
int i = ;
kx = ;
while (i <= n * ) {
int j = i;
while (j + <= n * && s[j + ] == s[i]) ++j;
s[kx] = s[i];
i = j + ;
++kx;
}
--kx;
for (int i = ; i <= n + n; ++i) fa[i] = i, size[i] = ;
for (int i = ; i < li.size(); ++i) {
int x, y;
x = li[i].first;
y = li[i].second;
x = ge(x);
y = ge(y);
link(x, y);
}
bool f = ;
for (int i = ; i < tf.size(); ++i) {
int x, y;
x = tf[i].first;
y = tf[i].second;
x = ge(x);
y = ge(y);
x = find(x);
y = find(y);
if (x == y) { f = ; break; }
}
if (f) cout << "YES\n"; else cout << "NO\n";
}
return ;
}
BZOJ4195 luoguP1955 NOI2015D1T1 程序自动分析的更多相关文章
- 【BZOJ4195】[Noi2015]程序自动分析 并查集
[BZOJ4195][Noi2015]程序自动分析 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3 ...
- 【bzoj4195】[Noi2015]程序自动分析 离散化+并查集
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...
- 【BZOJ4195】 [Noi2015]程序自动分析
Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...
- BZOJ4195:[NOI2015]程序自动分析
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...
- 【BZOJ4195】【NOI2015】程序自动分析(并查集)
[BZOJ4195][NOI2015]程序自动分析(并查集) 题面 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设 ...
- 【bzoj4195】【NOI2015】程序自动分析
4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3470 Solved: 1626[Submit][Sta ...
- [UOJ#127][BZOJ4195][NOI2015]程序自动分析
[UOJ#127][BZOJ4195][NOI2015]程序自动分析 试题描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2, ...
- BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化
总的来说,这道题水的有点莫名奇妙,不过还好一次轻松A 4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 836 ...
- BZOJ4195 程序自动分析
Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...
随机推荐
- 使用JMeter进行RESTful API测试
使用JMeter进行RESTful API测试 在哪里设置实现最优脚本重用的属性 由于支持云的应用程序通常可以轻松.快速地进行复制和部署,所以可以在多种环境中对其进行测试.如果您需要在多个环境中测试和 ...
- Hive Shell 命令详解
Hive服务介绍 Hive默认提供的cli(shell)服务,如果需要启动其他服务,那么需要service参数来启动其他服务,比如thrift服务.metastore服务等.可以通过命令hive -- ...
- javafx 监听选择变化(TabPane)
editTab.getSelectionModel().selectedIndexProperty().addListener(evnt); javafx2.0 监听树和表的选择变化 Swing中的组 ...
- 排序算法<No.3>【桶排序】
算法,是永恒的技能,今天继续算法篇,将研究桶排序. 算法思想: 桶排序,其思想非常简单易懂,就是是将一个数据表分割成许多小数据集,每个数据集对应于一个新的集合(也就是所谓的桶bucket),然后每个b ...
- 阅读<<SDI TX Bridge>>笔记
阅读<<SDI TX Bridge>>笔记 1.Path from AXI4-Stream Video Processing to SDI 2.Top Level Block ...
- DOM confirm setTimeout url刷新
console.log 输出框 alert 弹出框 confirm 确认框 // URL和刷新 location.href 获取URL location.href = "url" ...
- Ubuntu使用操作记录/笔记
1.如何取得图形界面下的ROOT权限? 先alt+f2,然后 gksu nautilus 或者 kdesudo dolphin 2.如何使用Qt插件在Qt中进行ROS开发 http://blog.cs ...
- SpringCloud之网关 Zuul(四)
一 Zuul简介 zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用. Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Z ...
- Linux LVM 简单操作
查看当前磁盘分区情况fdisk -l 磁盘分区fdisk /dev/sdb# 可能用到的Type :# 8e Linux LVM# fd Linux raid auto 创建PVpvcreate /d ...
- 详细记录sql运行时间(精确到毫秒)
写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...