洛谷 [P1995] 程序自动分析
并查集+ 离散化
首先本题的数据范围很大,需要离散化,
STL离散化代码:
//dat是原数据,id是编号,sub是数据的副本
sort(sub + 1, sub + tot + 1);
size = unique(sub + 1, sub + tot + 1) - sub - 1;
for(int i = 1; i <= tot; i++) {
id[i] = lower_bound(sub + 1, sub + size + 1, dat[i]) - sub;
}
并查集所能维护的是具有传递性的关系,比如本题中 等于 就是这样的关系,而不等就不是.
所以本题的思路非常简单,首先处理出来等于的关系,对于每一个不等的关系找矛盾即可
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAXN = 100005;
int init() {
int rv = 0, fh = 1;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') fh = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
rv = (rv<<1) + (rv<<3) + c - '0';
c = getchar();
}
return fh *rv;
}
struct opt{
int x, y;
bool f;
}e[MAXN];
int T, n, id[MAXN<<1], dat[MAXN<<1], tot, sub[MAXN<<1], size, fa[MAXN<<2];
int find(int x) {
if(fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
void merge(int x, int y) {
if(x == y) return;
int r1 = find(x), r2 = find(y);
if(r1 != r2) fa[r1] = r2;
}
int main() {
T = init();
while(T--){
memset(e, 0, sizeof(e));
n = init();
tot = 0; size = 0;
for(int i = 1; i <= n; i++) {
e[i].x = init(); e[i].y = init(); e[i].f = init();
tot++; dat[tot] = sub[tot] = e[i].x;
tot++; dat[tot] = sub[tot] = e[i].y;
}
sort(sub + 1, sub + tot + 1);
size = unique(sub + 1, sub + tot + 1) - sub - 1;
for(int i = 1; i <= tot; i++) {
id[i] = lower_bound(sub + 1, sub + size + 1, dat[i]) - sub;
}
for(int i = 1; i <= size; i++) {
fa[i] = i;
}
/*for(int i = 1; i <= tot ; i++) printf("%d %d\n", id[i], dat[i]);
printf("\n");*/
bool fff = 0;
for(int i = 1; i <= n; i++) {
e[i].x = id[i * 2 - 1]; e[i].y = id[i * 2];
if(e[i].f) {
merge(e[i].x, e[i].y);
}
}
for(int i = 1; i <= n; i++) {
if(!e[i].f) {
if(find(e[i].x) == find(e[i].y)) {fff = 1;break;}
}
}
if(!fff) {
printf("YES\n");
}else printf("NO\n");
}
return 0;
}
洛谷 [P1995] 程序自动分析的更多相关文章
- codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析
4600 [NOI2015]程序自动分析 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 在实现 ...
- 洛谷 P1955 程序自动分析
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...
- 洛谷P1955 程序自动分析 [NOI2015] 并查集
正解:并查集+离散化 解题报告: 传送门! 其实题目还挺水的,,,但我太傻逼了直接想挂了,,,所以感觉还是有个小坑点所以还是写个题解记录下我的傻逼QAQ 首先这题一看,就长得很像NOIp关押罪犯?然后 ...
- NOI2015 洛谷P1955 程序自动分析(并查集+离散化)
这可能是我目前做过的最简单的一道noi题目了...... 先对e=1的处理,用并查集:再对e=0查询,如果这两个在同一集合中,则为""NO",最后都满足的话输出" ...
- 题解【洛谷P1995】口袋的天空
题面 题解 从图中删边,直到图中只剩\(k\)条边,计算权值之和即可. 代码 #include <iostream> #include <cstdio> #include &l ...
- 洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]
题目传送门 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或x ...
- 洛谷p1955[NOI2015]程序自动分析
题目: 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...
- 程序自动分析(NOI2015)(洛谷P1955)题解
原题: 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...
- 洛谷P2796 Facer的程序
洛谷题目链接 动态规划 我们看题目后知道这是一棵无根树,要求出有多少子树 我们设$f[u][1]$表示选了当前节点$u$的方案数 相反的$f[u][0]$则为不选中$u$ 那么考虑状态转移如下: f[ ...
随机推荐
- nginx 编译某个模板的问题./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library stati
root@hett-PowerEdge-T30:/usr/local/src/nginx-1.9.8# ./configure --prefix=/usr/local/nginx --add-mod ...
- Git强制pull
git fetch --all git reset --hard origin/master
- java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...
- Xcode编译工具
一.关于Other Linker Flags xcode中,在“Targets”选项下有Other Linker Flags选项,在这里可以填写xcode链接器的参数,如:-ObjC.-all_loa ...
- Luogu P5352 Terrible Homework
神仙@TheLostWeak出的题,因为他最近没时间所以我先写一下sol(其实我也没什么时间) 作为一道简单的数据结构题想必大家都能看出必须用LCT维护信息吧 一个朴素的想法就是直接维护四种操作的值, ...
- WPF显示尺寸与设备无关问题
WPF单位 WPF窗口以及其中的所有元素都是用与设备无关的单位进行度量.一个与设备无关的单位被定义为1/96英寸.WPF程序统一用下面一个公式来定义物理单位尺寸: [ 物理单位尺寸(像素)] = [ ...
- Bootstrap历练实例:按钮组大小
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Bootstrap 网格系统(Grid System)
Bootstrap 网格系统(Grid System) Bootstrap提供了一套响应式,移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 什么是 ...
- shell脚本,实现奇数行等于偶数行。
请把如下字符串stu494e222fstu495bedf3stu49692236stu49749b91转为如下形式:stu494=e222fstu495=bedf3stu496=92236stu497 ...
- 菜鸟学习Cocos2d-x 3.x——内存管理
菜鸟学习Cocos2d-x 3.x——内存管理 2014-12-10 分类:Cocos2d-x / 游戏开发 阅读(394) 评论(6) 亘古不变的东西 到现在,内存已经非常便宜,但是也不是可以 ...