P9352 [JOI 2023 Final] Cat Exercise (树形 dp+trick+并查集)
P9352 [JOI 2023 Final] Cat Exercise
upd 2024.11.15
树形 dp+trick+并查集
第一眼是:这是个无根树,猫移动的位置不会遵循以某固定根的树向子树跳,所以觉得这题有点复杂。
考虑到这题不是很贪心,那从 dp 思考。怎么 dp 没有后效性?但是又发现跳的高度是递减的。按照这个 dp 就有无后效性了。
设
表示从 开始跳最多跳跃次数。写出转移需要知道儿子连通块的最大值,并查集可以维护。
若我们以当前猫在的位置
考虑树形 dp。设
这样做最后答案就是最高点的
我们直接钦定一个根是无法满足无后效性的,
每个点权都不同,所以考虑一个 trick,连边
复杂度
#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define fi first
#define se second
#define pb push_back
typedef long long i64;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 200010;
int n;
i64 dep[N], anc[N][20], dp[N], fa[N], a[N];
std::vector<int> e[N];
void dfs(int u, int fa) {
dep[u] = dep[fa] + 1;
anc[u][0] = fa;
for(int i = 1; i <= 19; i++) anc[u][i] = anc[anc[u][i - 1]][i - 1];
for(auto v : e[u]) {
if(v == fa) continue;
dfs(v, u);
}
}
int lca(int u, int v) {
if(dep[u] < dep[v]) std::swap(u, v);
for(int i = 19; i >= 0; i--) if(dep[anc[u][i]] >= dep[v]) u = anc[u][i];
if(u == v) return u;
for(int i = 19; i >= 0; i--) if(anc[u][i] != anc[v][i]) u = anc[u][i], v = anc[v][i];
return anc[u][0];
}
int dist(int u, int v) {
int rt = lca(u, v);
return dep[u] + dep[v] - 2 * dep[rt];
}
int find(int x) {
if(x != fa[x]) fa[x] = find(fa[x]);
return fa[x];
}
void Solve() {
std::cin >> n;
for(int i = 1; i <= n; i++) {
fa[i] = i;
std::cin >> a[i];
}
for(int i = 1; i < n; i++) {
int u, v;
std::cin >> u >> v;
e[a[u]].pb(a[v]), e[a[v]].pb(a[u]);
}
dfs(1, 0);
for(int u = 1; u <= n; u++) {
for(auto v : e[u]) {
int fv = find(v);
if(fv < u) fa[fv] = u, dp[u] = std::max(dp[u], dp[fv] + dist(u, fv));
}
}
std::cout << dp[n] << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
Solve();
return 0;
}
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具