当前位置: 首页 > 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.jsqmd.com/news/79230/

相关文章:

  • K8S 中使用 YAML 安装 ECK
  • 如何更详细地应用AI提升学习效率?——大学生实战指南
  • 2025 最新租房/找房平台 TOP4 评测!数智化赋能 + 全维服务权威榜单发布,重构居家生活服务新生态 - 全局中转站
  • 当电机开始“唱歌“:NVH工程师的降噪日常
  • 在写小故事
  • Linux 中如何将文本中连续的字段转换成一个字段显示
  • 光伏板太阳能充电MATLAB仿真探索
  • 26、端口敲门与单包授权:网络安全认证技术对比
  • QtCreator IDE中向项目添加ui文件并绑定类
  • PI + 重复控制的并联型APF有源电力滤波器仿真探索
  • 20、深入理解Snort规则选项与iptables数据包过滤
  • 教程 29 - 从磁盘加载纹理
  • 从自动化到智能化,构建企业级Workflow Agent系统实战指南
  • 基于SpringBoot的大学生在线考试平台的设计与实现毕业设计项目源码
  • 003-RSA魔改:一号店
  • 创维LB2004_瑞芯微RK3566_2G+32G_删除移动定制_安卓11_原生桌面_线刷固件包-方法4
  • Jeecg AI开源平台:零门槛构建AI应用的完整指南
  • 与AI共舞:当代大学生如何在智能时代重塑学习与成长
  • RPA在企业微信桌面端的元素识别:基于坐标与基于属性的优劣对比
  • 详细介绍:【分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
  • 【Java避坑】为什么我的 String a == b 返回 false?一文搞懂 Java 中的 == 与 equals
  • 教程 30 - 纹理系统
  • 【题解】Luogu P1310 [NOIP 2011 普及组] 表达式的值
  • Java面试三连击:原理拆解+实战避坑
  • 【题解】Luogu P11854 [CSP-J2022 山东] 宴会
  • Stack
  • 深入Ascend C(四):多算子融合与图级优化实战——构建高性能Attention自定义Kernel
  • 【题解】Luogu P5322 [BJOI2019] 排兵布阵
  • 代码源挑战赛 Round 41
  • 详细介绍:NumPy / pandas 类型选型、内存占用与性能优化