[bzoj4195][Noi2015]程序自动分析

[bzoj4195][Noi2015]程序自动分析

题目大意:有$n(n\leqslant10^6)$个变量,有若干限制,形如$x_l$与$x_r$必须相等或不相等,问是否有解

题解:并查集,把相同的塞在一个集合里,最后判一下不相等的是否在一个集合内,是则无解

卡点:当成了元素非$0$即$1$

 

C++ Code:

#include <algorithm>
#include <cstdio>
#define maxn 1000010

int Tim, n, tot;
int v[maxn << 1], f[maxn], l[maxn], r[maxn], e[maxn];

int find(int x) { return x == f[x] ? x : (f[x] = find(f[x])); }
inline void merge(int a, int b) { f[find(a)] = find(b); }
int main() {
	scanf("%d", &Tim);
	while (Tim --> 0) {
		scanf("%d", &n); tot = 0;
		for (int i = 0; i < n; ++i) {
			scanf("%d%d%d", l + i, r + i, e + i);
			v[tot++] = l[i], v[tot++] = r[i];
		}
		tot = (std::sort(v, v + tot), std::unique(v, v + tot) - v);
		for (int i = 0; i < tot; ++i) f[i] = i;
		for (int i = 0; i < n; ++i) {
			l[i] = std::lower_bound(v, v + tot, l[i]) - v;
			r[i] = std::lower_bound(v, v + tot, r[i]) - v;
			if (e[i]) merge(l[i], r[i]);
		}

		bool check = true;
		for (int i = 0; i < n; ++i) if (!e[i]) check &= find(l[i]) != find(r[i]);
		puts(check ? "YES" : "NO");
	}
	return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10363225.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101131.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月29日 下午10:00
下一篇 2021年6月30日 上午8:00


相关推荐

  • 加壳工具的使用

    加壳工具的使用加壳工具的使用0x01前言0x01加壳简介0x02ASPack加壳0x03PE-Armor加壳0x01前言这是我对加壳工具的使用的学习记录。0x01加壳简介1.加壳:是一种通过一系列数学运算,将可执行程序文件(EXE)或动态链接库文件(DLL)的编码进行改变(目前加壳软件还可以压缩、加密),以达到缩小文件体积或加密程序编码的目的。当被加壳的程序运行时,外壳程序先被执行,然后由这…

    2022年6月27日
    33
  • pytest parametrize fixture_pytest参数化可变参数

    pytest parametrize fixture_pytest参数化可变参数前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

    2022年7月31日
    9
  • sdtout、stderr详解

    sdtout、stderr详解stdout 标准输出 输出方式是行缓冲 输出的字符会先存放在缓冲区 等按下回车键时才进行实际的 I O 操作 nbsp stderr 标准错误 是不带缓冲的 这使得出错信息可以直接尽快地显示出来 include lt stdio h gt intmain while 1 fprintf stdout Group fpri

    2026年3月18日
    2
  • 个人博客网站搭建[通俗易懂]

    个人博客网站搭建[通俗易懂]个人博客网站搭建VuePress介绍本人的个人博客网站,网站地址,是基于VuePress进行搭建。什么是VuePress根据官网:VuePress由两部分组成:第一部分是一个极简静态网站生成

    2022年7月1日
    23
  • 手把手使用idea创建vue项目

    手把手使用idea创建vue项目手把手使用 idea 创建 vue 项目参考网址 https mp weixin com s AgBkwasbKHRj 一 安装 Node js 首先要安装好 Node js 安装方法可以看我之前的文章 Node js 安装教程小尉 公众号 51ASPNETNode js 手把手安装图文教程二 创建 vue 项目 1 在 IDEA 中 File Open 打开一个空目录 2 然后输入命令 npminstall gvue cil 先安装 vue 的脚手架然后等待安装完成 3 安装完成

    2026年3月16日
    3
  • 将数据归一化到任意区间范围的方法

    将数据归一化到任意区间范围的方法将数据归一化到任意区间范围的方法一般常见的数据归一化,是归一化到0~1,或者-1~1的区间,但在一些特殊场合下,我们需要根据实际情况归一化到其他任意区间,方法是:将数据归一化到[a,b]区间范围的方法:(1)首先找到样本数据Y的最小值Min及最大值Max(2)计算系数为:k=(b-a)/(Max-Min)(3)得到归一化到[a,b]区间的数据:norY=a+k(Y-Min)Matla

    2022年6月23日
    151

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号