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 ...
随机推荐
- SDRAM---页读写
SDRAM---页读写 1.SDRAM页访问 一页通俗的来讲就是一行. SDRAM页写操作时序图: 2.DDR(经常被提起,但是我和你不熟) DDR的连续访问操作 给DDR一个write命令,同时给出 ...
- excel技巧--复制带excel侧边的表格
假设要复制出带excel侧边的表格内容,则使用以下步骤: 1.选择要复制的表格: 2.选择“页面布局”->“标题”选项的“打印”打勾: 3.选择“开始”->复制旁的三角选项:复制为图片: ...
- DEBUG模式详解
1. 如果开启了DEBUG模式,那么以后我们修改了Django项目的代码,然后按下ctrl+s,那么Django就会自动的给我们重启项目,不需要手动重启.2. 如果开启了DEBUG模式,那么以后Dja ...
- 【转】CSR蓝牙驱动程序引起的Win7奇怪问题
https://www.yanning.wang/archives/299.html @echo off title 恢复系统 REM 变量初始化 rem CSR路径 set CSRPath=&quo ...
- sql server 清理缓存
-1. 将当前数据库的全部脏页写入磁盘.“脏页”是已输入缓存区高速缓存且已修改但尚未写入磁盘的数据页. -- CHECKPOINT 可创建一个检查点,在该点保证全部脏页都已写入磁盘,从而在以后的恢 ...
- windebug 与 office Home
https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudentRetai ...
- linux 简单笔记
Linux查看端口使用状态.关闭端口方法 http://blog.csdn.net/wudiyi815/article/details/7473097
- IDEA创建Springmvc项目
项目主要步骤如下: 1.创建一个javaweb动态项目 2.导入springmvc demo所需要的jar包 3.生成项目war包 4.配置项目tomacat服务器 5.配置web.xml文件 6.编 ...
- JGit与远程仓库链接使用的两种验证方式(ssh和https)
JGit是使用JAVA的API来操控Git仓库的库,由Eclipse公司维护.他提供的API分成两个层次,底层命令和高层命令.底层API是直接作用于低级的仓库对象,高层的API是一个面向普通用户级别功 ...
- 测试用例脚本,调用其他模块方法的实例(数据分类 appium 和 selenium 看这里)
1.脚本里调用其他类里面的方法 需要把脚本里面的self.dr 传到其他类里面,其他类里面要先初始化这个self.dr 变成自己类里面的 脚本里面的dr是 appium启动的代码 dr= webdri ...