[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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux中如何查看端口占用情况「建议收藏」

    linux中如何查看端口占用情况「建议收藏」lsoflsof(listopenfiles)是一个列出当前系统打开文件的工具。lsof查看端口占用语法格式:lsof-i:端口号实例查看服务器8000端口的占用情况:#lsof-i:8000COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEnodejs26993root10uIPv4379995140t0TCP*:8000(LISTEN)可以看到8000端口已经

    2025年6月17日
    4
  • C# 通过 HtmlDocument 操作HTML节点

    C# 通过 HtmlDocument 操作HTML节点C#通过HtmlDocument操作HTML节点时,会发生不停地刷新的情况,在对html文档操作后加以判断即可解决这种问题。   PublicSubsetMainUlr(ByValWebBrowser1AsWebBrowser)           DimpElemAsHtmlElement=Nothing           即时信息页面          

    2022年7月19日
    15
  • 快速入门UML时序图「建议收藏」

    快速入门UML时序图「建议收藏」使用UML时序图重构代码使用UML时序图时序图是什么时序图的元素组合块(CombinedFragment)举例使用UML时序图最近,在重构项目中的老代码的时候,业务复杂,文档缺失。抽丝剥茧,沉迷在剪不断理还乱的纷繁的关系中,像是苏东坡诗中的那只高贵的乌鸦先生找不到落脚之处。披沙拣金,终于理出一点头绪,生怕忘了,赶紧记下来,又苦于没有好的方式去表达这些错杂的关系,蓦然发现,UML时序图是表达业…

    2022年6月29日
    36
  • 数据结构–循环队列[通俗易懂]

    数据结构–循环队列[通俗易懂]文章目录顺序存储结构循环队列代码实现注意顺序存储结构所谓顺序存储结构就是用一组地址连续的存储单元依次存放从队头到队尾的元素。声明两个指针rear、front分别用来指示队尾元素的下一位置和队头元素的位置。初始化时rear=front=0,插入新的元素时尾指针加1,元素出队列时队头指针加1。不过这样做有个问题,不论是入队还是出队,队头或队尾指针都是加1,这样做有一个问题,就是元素…

    2022年6月2日
    32
  • oracle数据库添加用户至dba_oracle取消用户dba权限

    oracle数据库添加用户至dba_oracle取消用户dba权限首先用管理员身份进入数据库SQLPLUSSYSTEM/密码sqlplussystem/diwaycom创建用户CREATEUSER用户名IDENTIFIEDBY密码;createuserdiwayidentifiedbydiwaycom;将刚创建的用户解锁ALTERUSER用户名ACCOUNTUNLOCK/LOCK;Alteruserdiwayaccount…

    2022年9月26日
    2
  • java 高级程序员_如何才能成为java高级程序员?「建议收藏」

    java 高级程序员_如何才能成为java高级程序员?「建议收藏」身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识。牛逼的人总是让人羡慕,但如何才能让自己成为牛逼的人对我们来说更重要,本文分享的是如何才能成为java高级程序员,你和java高级程序员只差这一篇鸡汤!干了这碗鸡汤,未来不可限量!1、离开舒适区,提高个人代码能力不安于现状,高级程序员一般都具有丰富…

    2025年7月9日
    4

发表回复

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

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