P10778 BZOJ3569 DZY Loves Chinese II 题解

news/2025/3/10 18:24:51/文章来源:https://www.cnblogs.com/Rock-N-Roll/p/18763331

\(\text{P10778 BZOJ3569 DZY Loves Chinese II 题解}\)

由于有强制在线的限制,无法考虑一些奇技淫巧。一般的手段难以维护,于是考虑对于图上问题,先整出一棵生成树来,分为树边和非树边。显然一个环一定由一些树边和一些非树边组成。考虑对于一条被删去的树边,不连通的条件显然是自己本身没有环或是过自己的环中都不只有自己这一条边被删掉。那么考虑对于树边分别考虑,那么就检查过这条边的环上是否清空了所有非树边。转化条件,考虑非树边的话就是非树边两点之间的所有树边会被做贡献,那么可以认为出现不连通情形当且仅当一个树边被删除的同时删除了所有对其做贡献的非树边。无向图检验环相关问题可以考虑线性基来处理。既然已经使用了线性基,不妨使用异或哈希来解决问题。于是对于每条非树边随机赋定一个权值,向上算每个树边的贡献集合也就是将每个非树边的权值异或起来,如果出现一组异或和为 \(0\),也就是无法插入时,图不连通。

代码:

#include <bits/stdc++.h>
#define N 500005
#define M 31
using namespace std;
int n, m;
mt19937 wdz(time(0));
struct Node {int to, nxt, id;
} e[N << 1];
int head[N], cnt;
void add(int u, int v, int w) {e[++cnt] = {v, head[u], w};head[u] = cnt;
}
int hsh[N], hse[N];
void dfs(int x, int fa) {for (int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if (y == fa) continue;dfs(y, x);hse[e[i].id] = hsh[y];hsh[x] ^= hsh[y];}
}int p[M];
int insert(int x) {for (int i = M - 1; ~i; --i)if ((x >> i) & 1) {if (!p[i]) {p[i] = x;return 1;}x ^= p[i];}return 0;
}
int fa[N];
int fnd(int x) {return x == fa[x] ? x : fa[x] = fnd(fa[x]);
}int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;iota(fa + 1, fa + 1 + n, 1);for (int i = 1; i <= m; i++) {int x, y;cin >> x >> y;int sx = fnd(x), sy = fnd(y);if (sx != sy) add(x, y, i), add(y, x, i), fa[sx] = sy;else {int p = wdz() % INT_MAX;hse[i] = p;hsh[x] ^= p, hsh[y] ^= p;}}dfs(1, 0);int T, ct = 0;cin >> T;while (T--) {int k, c, fg = 1;cin >> k;memset(p, 0, sizeof p);while (k--) {cin >> c;c ^= ct;fg &= insert(hse[c]);}if (fg) cout << "Connected\n";else cout << "Disconnected\n";ct += fg;}return 0;
}

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

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

相关文章

No.48 ES6---数组扩展之扩展运算符和新增方法

一、数组扩展之扩展运算符 1.扩展运算符扩展运算符(spread)是三个点(…)。将一个数组转为用逗号分隔的参数序列。<script>var arr = [10,23,45,6,7];//以前获取数组中的每个元素for(let i = 0;i<arr.length;i++){console.log(arr[i]);}//有了扩展运算符之后console.lo…

Zabbix 7.0 LTS 部署

Zabbix 7.0LTS教程 一、环境介绍 操作系统:Rocky Linux 9.5 软件版本:7.0LTS 二、安装教程 官网:Zabbix:企业级开源监控解决方案 点击右上角的下载ZABBIX选择对应的环境:选择之后往下拉会看到相应的部署步骤:2.1 软件源配置 按照文档提示:如果有epel.repo源码,需要先注释…

IDC机房无人值守:智能运维一体化解决方案

“智和网管平台”,通过实时监控、远程配置等技术实现数据中心机房的自动检测、自动报警、自动修复等功能,从而达到无需人工干预的机房运维状态,减少人为因素对设备运行的干扰,增强机房设备、设施数据的直观可视性、提高其利用率。 企业数字化转型以及5G、物联网、云…

rust学习二十.1、不安全代码之原始指针(裸指针)

一、前言 指针在前面的篇幅中已经介绍过许多,但主要是智能指针。 智能指针管理堆上的数据,并且受到rust的所有权和借用规则管理(注意,这里的所有权和借用有时候不同于最原始的那种)。 智能指针好歹能管着这些数据,但是rust中存在一些不能使用所有权管理的数据,它们需要利…

环境变量Path学习

什么是Path环境变量? “环境变量”和“path环境变量”其实是两个东西,不要混为一谈。 “环境变量”是操作系统工作环境设置的一些选项或属性参数。每个环境变量由变量名和文件路径组成的,可以设置很多个环境变量。 我们一般使用环境变量指定一个文件夹的位置,或一个应用程序…

rust学习二十.1、原始指针(裸指针)

一、前言 指针在前面的篇幅中已经介绍过许多,但主要是智能指针。 智能指针管理堆上的数据,并且受到rust的所有权和借用规则管理(注意,这里的所有权和借用有时候不同于最原始的那种)。 智能指针好歹能管着这些数据,但是rust中存在一些不能使用所有权管理的数据,它们需要利…

深度测评国产 AI 程序员,在 QwQ 和满血版 DeepSeek 助力下,哪些能力让你眼前一亮?

通义灵码上新模型选择功能,不仅引入了 DeepSeek 满血版 V3 和 R1 这两大 “新星”,Qwen2.5-Max 和 QWQ 也强势登场,正式加入通义灵码的 “豪华阵容”。开发者只需在通义灵码智能问答窗口的输入框中,单击模型选择的下拉菜单,便能轻松开启不同模型,畅享个性化服务。通义灵码…

AI Station使用笔记

一、安装maui (1)在104上,终端操作(必须有sudo权限):sudo apt install cifs-utilspip install maui==0.0.32 -i http://10.9.54.102:8888/simple --trusted-host 10.9.54.102 maui login (fang.wang03,密码为开机密码) maui project init RC_Collaboratives (前…

mysql索引浅谈

一. 索引: 索引是数据库中重要的数据结构,主要作用是提高查询的效率。索引相当于书本的目录,即可以快速定位所需数据的位置,而不用逐页查找。 二. 索引底层结构:索引底层主要采用B+树来实现索引的管理。B+树内部分为叶子节点和非叶子节点;非叶子节点主要用来存储索引和指…

java 常用注解记录汇总

1.@Transactional 可放在类或者方法上 2.@JsonFormat 一般用于格式化时间字段属性 3.@JsonProperty 和 @JSONField 前者是Jackson框架后者是阿里的 用法都是属性名之间的映射,场景多用于接口对接 说明: 比如和对方系统进行接口对接时,可能对方的字段名叫做 chinese_name和…

数据库索引简单介绍

数据库索引 基本概念索引本质是一种可以提升数据查询效率的数据结构主要分类 主要分为两类:聚簇(集)索引:一个叶子节点上存储的是索引(主键值)和数据为对应的行数据 非聚簇(集)索引:一个叶子节点上存储的是索引(某一个字段的值)和数据为对应的主键值B+树索引采用的数…

雅马哈机器人E17故障排除案例参考

雅马哈机器人E17故障是一个与电机控制相关的报警,它包含许多特定的故障代码,例如E17.410、E17.411、E17.802、E17.902、E17.905、E17.915等。 故障排除步骤数据备份:出现故障时,尽快备份数据。 诊断工具:使用教学设备或计算机软件进行诊断,浏览系统的所有故障类型和信息,…