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

P3258 [JLOI2014] 松鼠的新家

P3258 [JLOI2014] 松鼠的新家

大意

给多次修改,\(u, v\),每次将 \(u \to v\) 的路径上的点权加 \(1\),求最终每个点的点权值。

思路

显然树上差分。

定义 \(d_i\) 表示从 \(i\) 到根的路径上点权和,那么 \(u \to v\) 就只需要 \(d_u\)\(d_v\) 处加 \(1\),然后在 \(d_{lca(u, v)}\)\(d_{fa_{lca(u,v)}}\) 处减 \(1\),最后将差分数组求前缀和就是原数组。

代码

#include<iostream>
using namespace std;const int MAXN = 3 * 1e5 + 5;
struct node{int to,next;
}e[MAXN * 2];int f[MAXN][20],dp[MAXN];
int a[MAXN];
int h[MAXN * 2],tot = 0;
int n,k,ans = -1;
int diff[MAXN];void add(int x,int y){e[++ tot] = {y,h[x]};h[x] = tot;
}
void dfs(int u,int fa){dp[u] = dp[fa] + 1;f[u][0] = fa;for(int i = 1;(1 << i) <= dp[u];i ++){f[u][i] = f[f[u][i - 1]][i - 1];}for(int i = h[u];i;i = e[i].next){int v = e[i].to;if(v != fa) dfs(v,u);}return;
}void dfs2(int u,int fa){for(int i = h[u];i;i = e[i].next){int v = e[i].to;if(v == fa) continue;dfs2(v,u);diff[u] += diff[v];}
}int LCA(int x,int y){if(dp[x] < dp[y]) swap(x,y);for(int i = 19;i >= 0;i --){if(dp[x] - (1 << i) >= dp[y]){x = f[x][i];}}if(x == y) return x;for(int i = 19;i >= 0;i --){if(f[x][i] != f[y][i]){x = f[x][i],y = f[y][i];}}return f[x][0];
}
int main(){cin >> n;for(int i = 1;i <= n;i ++) cin >> a[i];for(int u,v,i = 1;i <= n - 1;i ++){cin >> u >> v;add(u,v); add(v,u);}dfs(1,0);for(int u,v,i = 2;i <= n;i ++){u = a[i - 1],v = a[i];int l = LCA(u,v);diff[u] ++;diff[v] ++;diff[l] --;diff[f[l][0]] --;}dfs2(1,0);for(int i = 2;i <= n;i ++){diff[a[i]] --;}for(int i = 1;i <= n;i ++){cout << diff[i] << '\n';}return 0;
}
http://www.rkmt.cn/news/89290.html

相关文章:

  • K8S 中使用 YAML 安装 ECK
  • 23、深入解析 fwsnort 与 psad 的协同防御机制
  • 光伏板太阳能充电MATLAB仿真探索
  • 基于SpringBoot的高校HIV预防宣传系统毕业设计项目源码
  • 创维LB2004_瑞芯微RK3566_2G+32G_删除移动定制_安卓11_原生桌面_线刷固件包-方法4
  • 详细介绍:【分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
  • 【Java避坑】为什么我的 String a == b 返回 false?一文搞懂 Java 中的 == 与 equals
  • Java面试三连击:原理拆解+实战避坑
  • 【题解】Luogu P11854 [CSP-J2022 山东] 宴会
  • 代码源挑战赛 Round 41
  • 详细介绍:NumPy / pandas 类型选型、内存占用与性能优化
  • 告别选择困难!2025年远程控制软件场景化终极横评
  • 青少年编程学习:考级与竞赛如何平衡
  • 2025 Autel MaxiVCI V150 Wireless Dongle: CAN FD/DOIP for Autel 900 Series Scanners
  • 【题解】Luogu P8269 [USACO22OPEN] Visits S
  • Ubuntu环境中LLaMA Factory 的部署与配置—构建大语言模型微调平台 - 实践
  • WSL安装方法
  • 【题解】P11453 [USACO24DEC] Deforestation S
  • 【dl】【WSL2】如何获得“Winux”?Windows 上的 Linux 子系统 —— 比虚拟机更好的选择
  • CSS3动画:2D/3D转换全解析
  • P2014 [CTSC1997] 选课
  • 彻底讲清 MySQL InnoDB 锁机制:从 Record 到 Next-Key 的全景理解
  • MCU的启动流程你了解么?
  • I2C通信最全面的讲解:从协议到硬件设计
  • 【题解】Luogu P10752 [COI 2024] Sirologija
  • Python字符串:别只用来打印!这5个高级用法让代码效率翻倍
  • 【题解】Atcoder ABC432 C
  • 赶due党救急!论文降重2小时搞定,不熬夜
  • 计算机论文模板推荐:8大平台+AI修改工具
  • 期待回家,顺便写点年度总结