P9433 [NAPC-#1] Stage5 - Conveyors (lca 维护树上路径)
P9433 [NAPC-#1] Stage5 - Conveyors
lca 维护树上路径
但是这题不是难在这里,考察的是分析问题答案构成的能力。我们可以从数据范围出发。
#
每条边都要走两遍,显然是树上所有边权和
#
可以构造一种走法,使得
无特殊限制#
那么经过上面的思考,可以知道我们一定要走的边一定有包含
那么如何处理每个点到连通块的最短距离呢?当然可以建源点,跑最短路求出。但是有更简单的做法:显然连通块中一定有关键点,如果我们将其中一个关键点作为根,那么连通块一定是树上最上面的一片,这时候剩下的点都在连通块之下,可以直接倍增往上跳到第一个在连通块中的点。
求出
复杂度
#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 int N = 1e5 + 10;
int n, q, k, rt, sum;
int dep[N], anc[N][20], vis[N], dis[N];
std::vector<pii> 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.fi == fa) continue;
dis[v.fi] = dis[u] + v.se;
dfs(v.fi, u);
if(vis[v.fi]) sum += v.se;
vis[u] |= vis[v.fi];
}
}
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 get(int u) {
if(vis[u]) return u;
for(int i = 19; i >= 0; i--) {
if(anc[u][i] && !vis[anc[u][i]]) u = anc[u][i];
}
return anc[u][0];
}
int dist(int u, int v) {
int rt = lca(u, v);
return dis[u] + dis[v] - dis[rt] * 2;
}
void Solve() {
std::cin >> n >> q >> k;
for(int i = 1; i < n; i++) {
int u, v, w;
std::cin >> u >> v >> w;
e[u].pb({v, w}), e[v].pb({u, w});
}
for(int i = 1; i <= k; i++) {
int x;
std::cin >> x;
vis[x] = 1;
rt = x;
}
dfs(rt, 0);
while(q--) {
int s, t;
std::cin >> s >> t;
int u = get(s), v = get(t);
std::cout << sum * 2 - dist(u, v) + (dis[s] - dis[u]) + (dis[t] - dis[v]) << "\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工具