当前位置: 首页 > news >正文

AcWing 4963:砍树 ← 树上差分(边差分)+ dfs预处理

【题目来源】
https://www.acwing.com/problem/content/4966/

【题目描述】
给定一棵由 n 个结点组成的树以及 m 个不重复的无序数对(a1, b1),(a2, b2),…,(am, bm),其中 ai 互不相同,bi 互不相同,ai≠bj(1≤i, j≤m)。
小明想知道是否能够选择一条树上的边砍断,使得对于每个(ai, bi)满足 ai 和 bi 不连通,如果可以则输出应该断掉的边的编号(编号按输入顺序从 1 开始),否则输出 -1。

【输入格式】
输入共 n+m 行,第一行为两个正整数 n,m。
后面 n-1 行,每行两个正整数 xi,yi 表示第 i 条边的两个端点。
后面 m 行,每行两个正整数 ai,bi。​​​​​​​

【输出格式】
一行一个整数,表示答案,如有多个答案,输出编号最大的一个。​​​​​​​

【输入样例】
6 2
1 2
2 3
4 3
2 5
6 5
3 6
4 5

【输出样例】
4

【样例解释】
断开第 2 条边后形成两个连通块:{3,4},{1,2,5,6},满足 3 和 6 不连通,4 和 5 不连通。
断开第 4 条边后形成两个连通块:{1,2,3,4},{5,6},同样满足 3 和 6 不连通,4 和 5 不连通。
4 编号更大,因此答案为 4。

【数据范围】
对于 30% 的数据,保证 1<n≤1000。
对于 100% 的数据,保证 1<n≤10^5,1≤m≤n/2。​​​​​​​

【算法分析】
● 树上差分
树上差分是一种在树上高效处理路径修改和查询的算法技巧,核心思想是将路径操作转化为对节点差分数组的单点修改,最后通过一次遍历还原出结果。 它特别适合处理‌多次对树上路径进行加减操作,最后查询某个点或边的权值‌这类问题。
(一)核心思想
点差分‌:对路径 (x, y) 上所有点的权值进行修改。通过在 x 和 y 处 +val,在 lca(x,y) 和其父节点处 -val,最后通过 DFS 自底向上求和即可还原路径上的权值。具体操作为:对路径 (x, y) 加 val,执行 diff[x] += val, diff[y] += val, diff[lca] -= val, diff[fa[lca]] -= val。
边差分‌:对路径 (x, y) 上所有边的权值进行修改。通常将边权下放给深度较大的子节点,转化为点权问题,处理方式与点差分类似。具体操作为:对路径 (x, y) 加 val,执行 diff[x] += val, diff[y] += val, diff[lca] -= 2 * val(假设边权下放给子节点)。
(二)适用场景
点差分‌:路径点权修改、子树点权修改、查询点权。
边差分‌:路径边权修改、查询边权。
(三)与其他算法对比
与线段树对比‌:树上差分代码简洁,适合离线操作;线段树支持在线查询,但常数较大。
与树链剖分对比‌:树上差分处理路径修改更高效;树链剖分功能更强大,支持复杂路径查询。

● LCA ← 树上差分常用 LCA
(1)暴力法(向上标记法):https://blog.csdn.net/hnjzsyjyj/article/details/152026341
(2)暴力法(同步前进法‌):https://blog.csdn.net/hnjzsyjyj/article/details/152070927
(3)倍增法(DFS预处理):https://blog.csdn.net/hnjzsyjyj/article/details/152203103
(4)倍增法(BFS预处理):​​​​​​​https://blog.csdn.net/hnjzsyjyj/article/details/152234376

【算法代码:dfs预处理
视频讲解详见:https://www.bilibili.com/video/BV1bg4y127QH/

#include<bits/stdc++.h>
using namespace std;typedef long long LL;
typedef pair<int,int> PII;
const int N=2e5+5;
const int LOG=20;
vector<int> g[N];
map<PII,int> mp;
int dep[N],f[N][LOG+5];
int d[N];
int n,m,ans;void dfs1(int u,int fa) { //preprocessdep[u]=dep[fa]+1;f[u][0]=fa;for(int i=1; (1<<i)<=dep[u]; i++) { //i<=LOGf[u][i]=f[f[u][i-1]][i-1];}for(auto j:g[u]) {if(j!=fa) dfs1(j,u);}
}int getLCA(int u,int v) {if(dep[u]<dep[v]) swap(u,v);for(int i=LOG; i>=0; i--) {if(dep[f[u][i]]>=dep[v]) u=f[u][i];}if(u==v) return u;for(int i=LOG; i>=0; i--) {if(f[u][i]!=f[v][i]) {u=f[u][i],v=f[v][i];}}return f[u][0];
}int dfs2(int u,int fa) {int res=d[u];for(auto j:g[u]) {if(j==fa) continue;int cnt=dfs2(j,u);if(cnt==m) {ans=max(ans,mp[{j,u}]);}res+=cnt;}return res;
}int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=1; i<n; i++) {int u,v;cin>>u>>v;mp[{u,v}]=mp[{v,u}]=i;g[u].push_back(v);g[v].push_back(u);}dfs1(1,-1);for(int i=1; i<=m; i++) {int x,y;cin>>x>>y;int lca=getLCA(x,y);d[x]++,d[y]++,d[lca]-=2;}dfs2(1,-1);cout<<(ans==0?-1:ans)<<'\n';return 0;
}/*
in:
6 2
1 2
2 3
4 3
2 5
6 5
3 6
4 5out:
4
*/





【参考文献】
https://www.bilibili.com/video/BV1bg4y127QH
https://www.cnblogs.com/Chase-s/p/10410265.html
https://www.cnblogs.com/hetailang/p/16216504.html
https://blog.51cto.com/u_13536312/5371363
https://www.acwing.com/solution/content/186355/


 

http://www.jsqmd.com/news/283115/

相关文章:

  • 笔记 - 电脑更换主板后需要重新更新驱动或激活的部分
  • 热门的波纹式脱硝催化剂品牌2026年哪家质量好?深度测评
  • 基于SenseVoice Small实现多语言语音识别与情感分析
  • AI绘画成本太高?麦橘超然免费离线方案实战评测
  • 小白也能懂的BEV+Transformer:PETRV2模型保姆级教程
  • es配置x-pack使用账号密码验证
  • 实测分享:YOLO11在复杂场景下的检测效果
  • 2026年性价比靠谱的办公设计专业公司推荐
  • OCR预处理怎么做?图像去噪增强配合cv_resnet18提效
  • 2026年知名的悬链式抛丸机公司哪家靠谱?专业测评
  • 小白友好!一键启动Qwen2.5-7B微调环境,无需配置
  • 基于Java+Springboot+Vue开发的新闻管理系统源码+运行步骤+计算机技术
  • MinerU内存泄漏排查:长时间运行稳定性测试
  • 【数据可视化必备技能】:Python动态设置Excel单元格颜色实战代码
  • Z-Image-Turbo支持LoRA微调吗?模型扩展性部署分析
  • 告别复杂配置:HY-MT1.5-7B镜像化部署,十分钟启动翻译API
  • 工业缺陷检测新方案,YOLOv9镜像快速实现
  • UnicodeDecodeError ‘utf-8‘ codec can‘t decode,99%的人都忽略的这5个细节
  • Qwen3-4B vs 国产模型对比:综合能力与部署成本评测
  • 基于SpringBoot的工资信息管理系统毕设源码
  • C语言-单向循环链表不带头节点的基本操作(增、删、改、查)
  • 麦橘超然支持seed调节?完整功能实测报告
  • 10分钟完成Qwen儿童图生模型部署:新手入门必看教程
  • 深入解析:linux 安装Kafka 和springboot kaka实战
  • 原型链查找的 O(N) 开销:在超长继承链下属性访问的性能损耗实验 - 详解
  • IndexTTS-2批量合成实战:自动化语音生成部署教程
  • OCR实战应用:用cv_resnet18_ocr-detection提取发票信息全记录
  • 新手必看!YOLOv9官方版镜像从0到推理全流程
  • Emotion2Vec+ Large集群部署:多节点负载均衡方案设计
  • 学生党福音!低成本搭建PyTorch深度学习环境的方法