【题目链接】

ybt 1553:【例 2】暗的连锁

【题目考点】

1. 树上差分:边差分

类似对差分序列进行修改可以完成对原序列的区间修改。对树上边差分进行修改可以完成对树上一条路径中所有边的边权进行修改。
一条边的差分值为该边的权值减去该边连接的深度较大结点向孩子连出的所有边的权值加和。一般将边权值记录在该边连接的深度较大的结点中,虽然每个结点对应一个权值,实际表示的是该结点到其双亲的边的权值。
设差分数组ddddud_udu表示u到u的双亲边的权值减去 所有u到u的孩子边的权值的和 的差值。实际为结点u保存的权值减去所有u的孩子结点保存的权值的加和。
使树上路径(x, y)中所有边的权值都增加v,那么x、y到双亲的边的权值增加v,没有x、y到孩子的边,所以dxd_xdxdyd_ydy都增加v。LCA(x,y)LCA(x, y)LCA(x,y)到孩子的边有两条,都增加v,而LCA(x,y)LCA(x, y)LCA(x,y)到其双亲的边的权值没有增加,因此dLCA(x,y)d_{LCA(x, y)}dLCA(x,y)减少2v2v2v
因此对树上从x到y的路径上每条边都增加v的操作,对差分数组ddd的影响为:
dx=dx+v,dy=dy+v,dLCA(x,y)=dLCA(x,y)−2vd_x=d_x+v, d_y=d_y+v, d_{LCA(x, y)} = d_{LCA(x, y)} - 2vdx=dx+v,dy=dy+v,dLCA(x,y)=dLCA(x,y)2v

从根结点出发进行dfs,将每个结点所有孩子的权值加和,再加上当前结点的差分值,即为当前结点表示的权值,即当前结点到其双亲结点的边的权值。

【解题思路】

无向图有n个结点,的主要边有n-1条,而且任意两结点之间都存在一条由主要边构成的路径,即该图是连通图。
连通图有n个结点,n-1条边,那么该图是树。
接下来还有m条附加边,默认附加边和主要边不会重合。
目标是想通过切断一条主要边和一条附加边来使整个图不连通。
假设存在一条从结点A到结点B的附加边,在树上一定存在一条从结点A到结点B的路径,再加上附加边(A,B),就会形成一个环。需要切掉树上从A到B路径上的一条主要边,以及(A,B)这一条附加边,才能使这个图不连通。
假设树上从A到B的路径上经过了边(C,D)。
现在假设存在另一个附加边(X,Y),树上从X到Y的路径上也经过了边(C,D)。
那么即便去掉边(C,D),从结点C到结点D也存在至少两条路径,接下来再切断哪条附加边,整个图仍然是连通的。

因此,每个附加边都与主要边构成的树形成了环。可以统计树上每条边参与构成环的数量。设边权的概念为该边参与构成了几个由主要边与附加边构成的环。
假设存在附加边(A, B),就可以认为在树上从A到B的路径每条边的边权增加1。
遍历所有附加边,每条附加边都会使树上一条路径上每条边增加边权1,最后统计所有主要边的边权。该过程可以通过树上边差分方法完成。
遍历所有主要边:

  • 如果一条主要边的权值为0,那么没有环经过这条边。切断该主要边后,整个图已经不连通了,再切断任意附加边都可以完成任务,方案数为附加边的数量m,切断边的方案数增加m。
  • 如果一条主要边的权值为1,那么存在一条附加边和树形成的环经过了这条主要边。此时可以切断当前主要边,与当前环中的附加边,整个图就可以不连通,切断边的方案数增加1。
  • 如果一条主要边的权值大于等于2,那么切断当前主要边后,图中仍存在多条连接该边两端点的路径,无论切断任何附加边,整个图还是连通的。
    统计所有切断边能使图不连通的方案数,即为结果。
    在这里插入图片描述
    示例图:
    边(A, E), (E, C), (E, D), (E, B)是主要边,(A, C), (A, D)是附加边。
    (E, B)边权为0,切断(E, B)后,切断任意附加边都可以使图不连通,有2种方案。
    (E, C)边权为1,切断(E, C)后,必须切断(A, C),整个图才不连通,有1种方案。
    (E, D)边权为1,切断(E, D)后,必须切断(A, D),整个图才不连通,有1种方案。
    (A, E)边权为2,切断(A, E)后,无论切断任何附加边,都无法使图不连通。

【题解代码】

解法1:树上差分 边差分

#include<bits/stdc++.h>
using namespace std;
#define N 100005
#define LN 30
int n, m, lg[N], fa[N][LN], dep[N], d[N], val[N], ans;
vector<int> edge[N];
void initLg()
{for(int i = 2; i <= n; ++i)lg[i] = lg[i/2]+1;
}
void dfs(int u)
{for(int v : edge[u]) if(v != fa[u][0]){dep[v] = dep[u]+1;fa[v][0] = u;for(int i = 1; 1<<i <= dep[v]; ++i)fa[v][i] = fa[fa[v][i-1]][i-1];dfs(v);}
}
int lca(int u, int v)
{if(dep[u] < dep[v])swap(u, v);while(dep[u] > dep[v])u = fa[u][lg[dep[u]-dep[v]]];if(u == v)return u;for(int k = lg[dep[u]]; k >= 0; --k)if(fa[u][k] != fa[v][k])u = fa[u][k], v = fa[v][k];return fa[u][0];
}
void update(int x, int y)
{d[x]++, d[y]++, d[lca(x, y)] -= 2;
}
void dfsGetVal(int u)
{val[u] = d[u];for(int v : edge[u]) if(v != fa[u][0]){dfsGetVal(v);val[u] += val[v];}
}
int main()
{int a, b;cin >> n >> m;for(int i = 1; i < n; ++i){cin >> a >> b;edge[a].push_back(b);edge[b].push_back(a);}initLg();dfs(1);//根据树边构成的树 得到fa数组 for(int i = 1; i <= m; ++i){cin >> a >> b;//附加边(a, b) update(a, b);//路径修改(a, b)	}dfsGetVal(1);for(int i = 2; i <= n; ++i)//1是根结点,除了根结点,每个结点的值为该结点到其双亲的边的值 {if(val[i] == 0)//被覆盖0次,可以切任何附加边 ans += m;else if(val[i] == 1)//被覆盖1次,只能切覆盖(i, fa[i])的附加边 ans++;}cout << ans;return 0;
}

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

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

相关文章

二分查找-852.山峰数组的峰顶索引-力扣(LeetCode)

一、题目解析1.山峰数组数据严格满足arr[0]<arr[1]……<arr[i]>arr[i1]……arr[arr.size()-1]2.时间复杂度要求为O(logN)二、算法解析解法1&#xff1a;暴力解法-O(N)遍历数组arr&#xff0c;结合山峰数组性质&#xff0c;我们发现峰顶存在arr[i]>arr[i-1]&#xf…

高可用架构模式——数据集群和数据分区

目录 一、数据集群 1.1、 数据集中集群 1.2、 数据集中集群的复杂度具体体现 1.3、数据分散集群 1.4、数据分散集群的复杂度具体体现 1.5、数据分散集群和数据集中集群的不同点 二、数据分区 2.1、数据分区架构需要考虑的因素 2.1.1、数据量 2.1.2、分区规则 2.1.3、复制规则 2…

上电复位断言的自动化

POR是所有SoC设计的关键功能序列&#xff0c;其作用是将系统从任意状态恢复至正常状态。任何未被检测到的POR缺陷都可能导致实际芯片中的灾难性后果。复杂数量的重置逻辑给验证工程师带来了更大挑战——他们需要在RTL仿真过程中捕捉这些设计缺陷。随着SoC规模和复杂度的持续增长…

2025 年最新 AI 技术:全景洞察与深度解析​

2025 年最新 AI 技术&#xff1a;全景洞察与深度解析​在科技飞速发展的当下&#xff0c;AI 技术无疑是最耀眼的那颗星&#xff0c;持续为我们的生活与工作带来前所未有的变革。步入 2025 年&#xff0c;AI 技术更是呈现出多点突破、全面开花的态势&#xff0c;下面就为大家深入…

Vue项目中的AJAX请求与跨域问题解析

一、AJAX请求方式对比与选型1. 原生XHR方式基本使用示例&#xff1a;缺点分析&#xff1a;代码冗长复杂回调地狱问题需要手动处理JSON转换错误处理不够直观2. jQuery的AJAX基本使用示例&#xff1a;$.ajax({url: http://localhost:5000/api/data,type: GET,success: function(d…

使用 Longformer-base-4096 进行工单问题分类

简述最近接了对Ticket 进行问题分类的任务&#xff0c;使用了prompt和机器学习两种方式来解决&#xff0c;这里重点介绍Longformer-base-4096 模型训练的方案使用 Longformer-base-4096 模型实现文本分类系统&#xff0c;利用 Longformer 处理长序列的能力进行准确分类。该解决…

Matplotlib和Plotly知识点(Dash+Plotly分页展示)

Matplotlib和Plotly知识点&#xff08;DashPlotly分页展示&#xff09;0、Matplotlib、Plotly和Dash区别 &#xff08;推荐用DashPlotly&#xff09;1.1、Matplotlib &#xff08;静态图&#xff09;1. Figures&#xff08;图形&#xff09;概念创建Figure保存和显示Figure2. S…

YOLO12论文阅读:Attention-Centric Real-Time Object Detectors

文章链接&#xff1a; 2502.12524https://arxiv.org/pdf/2502.12524 摘要 (Abstract)​​ 长期以来&#xff0c;增强 YOLO 框架的网络架构至关重要&#xff0c;但尽管注意力机制在建模能力方面已被证明具有优越性&#xff0c;改进却主要集中在基于 CNN 的方面。这是因为基于…

秋招Day17 - Spring - 事务

Spring事务的种类编程式事务和声明式事务介绍一下编程式事务管理&#xff1f;通过编程的方式显式控制事务的开始、提交和回滚&#xff0c;一般使用TransactionTemplate的execute方法介绍一下声明式事务管理&#xff1f;基于AOP&#xff0c;通过调用代理对象拦截目标方法&#x…

多维基分析求导法则

对于n维点R0(I1,I2,I3,......In)如果到R&#xff08;I1&#xff0c; I2 , I3 ,......,In )有基分析求导定理&#xff1a;即R0 R0 *&#xff08;x1 ,x2 ,x3 ,.............xn) R当I1&#xff0c;I2&#xff0c;....,In独立不能转化时有了独立变量的求导和积分不相干法则…

Java值传递和构造函数

一.Java值传递首先我们来看一串代码&#xff1a;输出 10 20&#xff0c;而不是20 10 这是为什么呢&#xff1f;有内存图可以知道&#xff0c;这个change方法所改变的东西最终没有写回到main之中&#xff0c;且他传的是具体的数据&#xff0c;所以还会输出原数据&#xff0c;就相…

电商项目_秒杀_架构及核心

秒杀架构设计先看下普通web项目架构&#xff1a; &#xff08;Nginx : 反向代理、负载均衡&#xff0c;一般是运维部分做生产搭建的时候配置好&#xff09;秒杀架构设计&#xff1a;和普通架构区别&#xff1a;原先由Web 服务或Nginx服务提供的静态资源放到了CDNNginx的职责放⼤…

4x4矩阵教程

4x4矩阵教程 1. 简介 四维矩阵是计算机图形学和3D变换中的重要工具&#xff0c;用于表示三维空间中的仿射变换。本教程将介绍如何使用C实现四维矩阵的基本运算和变换。 2. 代码实现 2.1 头文件 (matrix4x4.h) #ifndef MATRIX4X4_H #define MATRIX4X4_H#include <array> #…

Oracle 数据库共享池与大池调优指南

在 Oracle 数据库的内存管理中&#xff0c;共享池&#xff08;Shared Pool&#xff09;和大池&#xff08;Large Pool&#xff09;是 SGA&#xff08;系统全局区&#xff09;中负责缓存与资源分配的核心组件。合理配置和调优这两个池&#xff0c;能显著提升数据库性能 —— 尤其…

C# Lambdab表达式 Var 类

Lambdab 是用于创建一个方法的表达式Func<参数1类型, 参数2类型, 返回值类型> fnName >(参数1 参数2) {方法代码体}Func<int, int, bool> fnName (int a, int b) > {return a > b; };//调用时和普通方法一致 Console.WriteLine(fnName(10,20)); // false…

【Python】常见模块及其用法

文章目录1. 什么是模块和包&#xff1f;2. 常见的模块及其用法2.1 time概览2.1.1 时间获取方法2.1.2 时间格式化与解析2.1.3 程序计时与延迟2.1.4 时间转换2.2 random概览2.2.1 基本随机数2.2.2 随机整数2.2.3 序列操作2.2.4 概率分布2.2.5 随机种子2.2.6 状态管理2.3 os概览2.…

洛谷 P3478 [POI 2008] STA-Station

【题目链接】 洛谷 P3478 [POI 2008] STA-Station 【题目考点】 1. 树形动规&#xff1a;换根动规 换根动规&#xff0c;又名二次扫描法&#xff0c;一般是给一颗不定根树&#xff0c;通过两次扫描来求解。 我们可以先任选一个根结点root&#xff0c;通过树形动规的思想计算…

【爬虫】03 - 爬虫的基本数据存储

爬虫03 - 爬虫的数据存储 文章目录爬虫03 - 爬虫的数据存储一&#xff1a;CSV数据存储1&#xff1a;基本介绍2&#xff1a;基本使用3&#xff1a;高级使用4&#xff1a;使用示例二&#xff1a;JSON数据存储1&#xff1a;基础json读写2&#xff1a;字符串和对象的转换3&#xff…

深入分析计算机网络数据链路层和网络层面试题

计算机网络体系结构1. 请简述 OSI 七层模型和 TCP/IP 四层模型&#xff0c;并比较它们的异同。OSI 七层模型&#xff1a;应用层&#xff1a;直接为用户的应用进程提供服务&#xff0c;如 HTTP&#xff08;超文本传输协议&#xff0c;用于 Web 浏览器与服务器通信&#xff09;、…

云服务器新装的mysql8,无法通过远程连接,然后本地pymysql也连不上

阿里云服务器&#xff0c;用apt-get新装的mysql-server&#xff0c;竟然无法通过远程连接到&#xff0c;竟然是这个原因。不是防火墙&#xff0c;iptables早就关了。也不是安全组&#xff0c;不是人为限制访问的话&#xff0c;根本没必要弄安全组 排查过程 netstat -antop|grep…