题意:给定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 程序自动分析的更多相关文章

  1. 【BZOJ4195】[Noi2015]程序自动分析 并查集

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

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

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

  3. 【BZOJ4195】 [Noi2015]程序自动分析

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

  4. BZOJ4195:[NOI2015]程序自动分析

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...

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

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

  6. 【bzoj4195】【NOI2015】程序自动分析

    4195: [Noi2015]程序自动分析 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3470  Solved: 1626[Submit][Sta ...

  7. [UOJ#127][BZOJ4195][NOI2015]程序自动分析

    [UOJ#127][BZOJ4195][NOI2015]程序自动分析 试题描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2, ...

  8. BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化

    总的来说,这道题水的有点莫名奇妙,不过还好一次轻松A 4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 836 ...

  9. BZOJ4195 程序自动分析

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

随机推荐

  1. Spring Cloud(Dalston.SR5)--Feign 声明式REST客户端

    Spring Cloud 对 Feign 进行了封装,集成了 Ribbon 并结合 Eureka 可以实现客户端的负载均衡,Spring Cloud 实现的 Feign 客户端类名为 LoadBala ...

  2. [视频播放] HLS协议之M3U8、TS流详解

    本文转载自:<hls之m3u8.ts流格式详解> HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部 ...

  3. VS2010 如何自动生成UML图

    项目名---右键----查看类图

  4. Linux From Scratch [3]

    1. 为了编译glibc,我们需要kernel header. make mrproper # clean kernel tree make INSTALL_HDR_PATH=dest headers ...

  5. centos 7 服务管理

    启动一个服务:systemctl start firewalld.service关闭一个服务:systemctl stop firewalld.service重启一个服务:systemctl rest ...

  6. C++进阶--编译器自动生成的类函数

    //############################################################################ /* 在C++ 03标准下 在没有显式定义 ...

  7. NGUI 合集

    UILabel  设置BBCode的时候 ,要设置颜色为白色 .不要设为其他的颜色因为会叠加的 .

  8. [Android 开发教程(1)]-- Saving Data in SQL Databases

    Saving data to a database is ideal for repeating or structured data, such as contact information. Th ...

  9. final与abstract关键字

    final特点: 1:这个关键字是一个修饰符,可以修饰类,方法,变量. 2:被final修饰的类是一个最终类,不可以被继承. 3:被final修饰的方法是一个最终方法,不可以被覆盖. 4:被final ...

  10. 峰Redis学习(9)Redis 集群(概述)

    第一节:Redis 集群概述 redis cluster是去中心化,去中间件的,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态.每个节点都和其他所有节点 ...