P9565 [SDCPC2023] Not Another Path Query Problem

news/2024/7/8 14:48:11/文章来源:https://www.cnblogs.com/FireRaku/p/18286594

P9565 [SDCPC2023] Not Another Path Query Problem

位运算+并查集

从价值至少为 \(V\) 入手,枚举一段二进制上长为 \(i\)前缀,第 \(i+1\) 位取 \(1\),并且比 \(V\) 要大,这样 \(i+1\) 之后的位就可以任意取了(不妨现在都先为 \(0\)),设这样构成的二进制串为 \(s\)

考虑按位与的性质,随着路径增加,价值不增。并且如果想要二进制上其中一位为 \(1\),那么路径上所有边的二进制上这一位都得是 \(1\)。回到上面枚举的 \(s\),不妨固定我们需要 \(s\) 上的所有 \(1\),那么满足条件的边就是二进制上至少有这些 \(1\) 的边。这些边集与所有点构成一张新的图,如果 \(u\)\(v\) 在这张图上连通,那么就可以找到一条满足条件的路径,使得价值 \(\ge s\ge v\)

判断连通性,用并查集。最多有 \(60\) 个边集,只需要其中一个连通即可。记得开 longlong

复杂度 \(O(m\log n)\)

#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_backusing i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 5e5 + 10;
i64 n, m, q, V;
struct node {i64 u, v, w;
} e[N];
std::vector<int> v[61];
struct DSU {int fa[N];void init(int n) {for(int i = 1; i <= n; i++) fa[i] = i;}int find(int x) {return x != fa[x] ? fa[x] = find(fa[x]) : fa[x];}void merge(int x, int y) {if(x == y) return;fa[x] = y;}
} dsu[61];
int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cin >> n >> m >> q >> V;for(int i = 1; i <= m; i++) {std::cin >> e[i].u >> e[i].v >> e[i].w;}for(i64 i = 60; i >= 0; i--) {dsu[i].init(n);i64 s = 0;if(i && ((V >> (i - 1)) & 1LL)) continue;if(i) s |= (1LL << (i - 1));for(i64 j = 59; j >= i; j--) {s |= ((1LL << j) & V);}for(int j = 1; j <= m; j++) {i64 w = e[j].w;if((s & w) == s) v[i].pb(j);}for(auto id : v[i]) {int x = dsu[i].find(e[id].u), y = dsu[i].find(e[id].v);dsu[i].merge(x, y);}}	while(q--) {int u, v;std::cin >> u >> v;bool flg = 0;for(int i = 60; i >= 0; i--) {if(dsu[i].find(u) == dsu[i].find(v)) {flg = 1;break;}}std::cout << (flg ? "Yes\n" : "No\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738967.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地Windows10怎样配置免安装版本MySQL?

下载MySQL免安装压缩包下载地址:https://downloads.mysql.com/archives/community/ 解压安装1、接下来我们解压文件夹,这时我们解压的文件夹是没有my.ini文件和data目录,这时我们需要自己创建my.ini文件,data文件后期回自动生成 2、新建配置my.ini文件,并添加配置信息,如下…

8、IDEA集成Git

8.1、配置Git忽略文件 8.1.1、忽略文件的原因 在使用 IDE 工具时,会自动生成一些和项目源码无关的文件,所以可以让 Git 忽略这些文件。 此外,把这些无关文件忽略掉,还能够屏蔽不同 IDE 工具之间的差异。 8.1.2、创建忽略规则文件如上图所示,在用户家目录下创建了一个忽略规…

时间序列分析专题——指数平滑模型

指数平滑法模型,分为季节性模型和非季节性模型。季节性模型只有在为活动数据集定义了周期时才可用。 本章只理论性地介绍这六种指数平滑法模型,让学习者在论文的应用中有话可写。 在具体实现中,SPSS会自动识别并给定一种最好的模型。 目录一、简单指数平滑法1.模型介绍2.关于…

Blazor 逐键搜索并动态反馈到url

Blazor 逐键搜索并动态反馈到url 源码 前言: 今天打开了 spotify 网页版找歌, 突然发现这个功能很抓眼球,于是试试blazor能不能模仿一下.1. 节省时间,直接用模板开搞 新建项目,使用bb模板, 命名为 b22dynamicURL2. 运行一次,看看效果 显示如下模板站点,就说明你前面的操作都对了…

集团数字化建设总体规划

1、数字生态体系建设规划 体系规划整体思路 从战略出发,描绘企业愿景蓝图,结合领先实践,设计方案与实施路线 通过体系规划和建设,助力业务发展,支撑战略落地 数字化助力上下贯通的高效管理与横向协同的业务经营 建设后援集中平台,实现高效高质集中作业、交叉销售,产生规…

氛围共处(Ambient Co-presence)丨RTE 共读计划

在同一个网络空间和情境下,营造一种微妙的、隐约感知的、实时同步的感觉。 加入「RTE 共读计划」: 重要的技术,往往是那些不易察觉却无所不在的技术。欢迎阅读「RTE 共读计划」的文章,我们希望通过本计划:• 挖掘到那些帮助人们跨越距离实时互动(Real-Time Engagement,R…

【已解决】pip已经安装好了模块,运行代码还是报错说没安装

在 Python 开发中,有时用 pip 安装了模块,运行代码时却提示没安装,这让人很困惑。下面来看看可能的原因和解决办法可能原因:1. 虚拟环境出错:如果用了虚拟环境,可能装错了地方,运行代码时用的环境没装这个模块。2. Python 版本不同:安装模块和运行代码的 Python 版本不…

# Day01

愿你自由如夏天的风,去实现所有开出花来的梦 Ctrl+C复制 Ctri+V粘贴 Crtl+A全选 Crtl+X剪切 Crtl+Z撤销 Crtl+S保存 …

关于平衡树(施工中)

关于Splay$\LARGE {一些无聊的定义}$ 二叉搜索树(BST树) 定义 二叉搜索树是一种二叉树的树形数据结构,其定义如下:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右子树不为空,则其右子树上所有点的附加权…

Linux 提权-SUID/SGID_1

本文通过 Google 翻译 SUID | SGID Part-1 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 了解特殊权限 2 寻找 SUID/SGID 二进制文件 – 手动方法2.1 枚举 SUID 二进制文件 2.2 枚举 SGID 二…

Java解析并修改JSON:将isShow属性改为false

哈喽,大家好,我是木头左!在Java中,可以使用各种库来处理JSON数据。其中,Jackson和Gson是两个非常流行且功能强大的库。在这篇文章中,将使用Jackson库来解析给定的JSON字符串,将其转换为Map对象,然后修改其中的"isShow"属性,最后再将其转回JSON字符串。 准备…

#cmd的常用命令(Dos)

cmd的常用命令首先win+r输入cmd并回车进入cmd命令中cd 命令:进入指定目录cd d:进入d盘目录.会发现进入不了d盘,因为cd只能在当前目录下操作不能跨区操作. 键入d:回车进入d盘.我d盘下有aaa文件夹cd aaa进入文件夹aaa目录下提示 ".."为上一级目录."."为当前…

StarRocks数据导入慢问题解决

一、问题描述依据StarRocks官网快速开始安装教程,用docker compose安装了starrocks,log模块从rabbitMq的队列批量获取log消息,发现队列消息有堆积,一晚上下来大概能对接4000条消息。经单元测试发现insert into到starrocks中时间竟然相差几百倍。 mysql每条insert sql执行3.…

CAN转PN网关模块连接激光切割机的配置方法

本文介绍了兴达易控CAN转Profinet网关模块(XD-PN_CAN20)用于连接CAN激光切割机的使用方法,激光切割机在工业生产中被广泛应用,而激光发射器与控制设备常以不同的协议存在两者之间,CAN总线和Profinet以各自的特点被广泛用于设备当中。本文将介绍介绍兴达易控CAN转Profinet网…

R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化|附代码数据

全文下载链接: http://tecdat.cn/?p=26105 最近我们被客户要求撰写关于LCTM的研究报告,包括一些图形和统计输出。 在本文中,潜类别轨迹建模 (LCTM) 是流行病学中一种相对较新的方法,用于描述生命过程中的暴露,它将异质人群简化为同质模式或类别。然而,对于给定的数据集…

第二章 和式

记号 求和的符号有两种形式 第一种是确定界限的形式,也叫封闭形式,例如:\(\sum\limits_{k=1}^n a_k\) 第二种叫做一般形式,就是把一个或者多个条件写在 \(\sum\) 符号的下面,例如刚刚的例子可以写成 \(\sum\limits_{1\le k \le n} a_k\) 和式和递归式的转化 和式和递归式之…

Andriod SDK安装教程

前言 最简单的方式 我们使用ANDROID STUDIO这款开发工具下载对应的Andriod SDK。 可是我们如果不开发安卓,只是用它的一些SDK包的话而安装整个开发工具,就没必要了。 这里讲的是用独立的 命令行工具 来操作。 下载命令行工具 点击此处进入下载页面, 滑动到最下边,选择合适的…

动态规划--打家劫舍-零钱兑换-算法刷题01

目录1. 概念2. 打家劫舍3 零钱兑换 1. 概念 关于动态规划这类问题 强烈建议学完下面的帖子: https://blog.csdn.net/qq_16664581/article/details/89598243 理解动态规划的使用场景强烈建议读一下这个故事: https://www.cnblogs.com/sdjl/articles/1274312.html 步骤:确定问…

一天快速入门Django:从0到1创建属于自己的Web应用

本文详细讲解了从零开始构建自己的 Web 应用所需的 Django 操作步骤。文章以简明易懂的方式引导读者设置开发环境,创建 Django 项目和应用,定义数据模型,编写视图函数和模板,以及配置 URL 路由。强调了 Django 框架的高效性和灵活性,特别是其基于 MTV(模型、模板、视图)…