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

P9433 [NAPC-#1] Stage5 - Conveyors 分析

感觉是经典题目。

题目概述

给出一个有 \(n\) 个点并且其中有 \(k\) 个关键点的无根树,要求从 \(s\) 走到 \(t\) 途中必须包含这 \(k\) 个关键点,求最短路径。

分析

考虑以一个关键点作为根。

由于这道题目 \(s,t\) 是会变的,所以我们把注意力放在这几个关键点上面。

我们根据这些关键点的位置把他划分成一个尽量小的区域,考虑这一部分对答案的贡献是不是一个定值。

我们可以考虑特殊情况:即 \(s,t\) 都在这个区域里面。

那么显然地,答案就是这个区域的所有边权和的两倍减去 \(s\rightarrow t\) 的最短路。

然后如果其中一个或者两个在外面的情况直接找到能到这个区域的最近的一个点即可,加上就行了。

代码

时间复杂度 \(\mathcal{O}((n+q)\log n)\)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#define int long long
#define N 100005
#define M 25
using namespace std;
int n,q,k,fa[N][M],dep[N],num[N],dis[N];
bool vis[N];
struct edge{int v,w;
};
vector<edge> g[N];
void dfs0(int cur,int father) {dep[cur] = dep[father] + 1;fa[cur][0] = father;for (auto i : g[cur])if (i.v != father) dis[i.v] = dis[cur] + i.w,dfs0(i.v,cur),num[cur] += num[i.v];
}
int LCA(int x,int y) {if (x == y) return x;if (dep[x] < dep[y]) x ^= y ^= x ^= y;for (int j = 20;j >= 0;j --)if (dep[fa[x][j]] >= dep[y]) x = fa[x][j];if (x == y) return x;for (int j = 20;j >= 0;j --)if (fa[x][j] != fa[y][j]) x = fa[x][j],y = fa[y][j];return fa[x][0];
}
int getdis(int x,int y) {return dis[x] + dis[y] - 2 * dis[LCA(x,y)];
}
int weight;
void dfs(int cur,int father) {if (!num[cur]) return;vis[cur] = 1;for (auto i : g[cur])if (i.v != father) {dfs(i.v,cur);if (vis[i.v]) weight += i.w;}
}
int getmn(int cur) {if (vis[cur]) return cur;for (int j = 20;j >= 0;j --)if (!vis[fa[cur][j]] && fa[cur][j]) cur = fa[cur][j];return fa[cur][0];
}
signed main(){cin >> n >> q >> k;for (int i = 1;i < n;i ++) {int u,v,w;scanf("%lld%lld%lld",&u,&v,&w);g[u].push_back({v,w});g[v].push_back({u,w});}int x;for (int i = 1;i <= k;i ++) {scanf("%lld",&x);vis[x] = 1,num[x] = 1;}dfs0(x,0);for (int j = 1;j <= 20;j ++)for (int i = 1;i <= n;i ++)fa[i][j] = fa[fa[i][j - 1]][j - 1];dfs(x,0);// cout << weight << '\n';for (int s,t;q --;) {scanf("%lld%lld",&s,&t);int mns = getmn(s),mnt = getmn(t);// cout << mns << ' ' << mnt << '\n';printf("%lld\n",2 * weight - getdis(mns,mnt) + getdis(mns,s) + getdis(mnt,t));}return 0;
}
http://www.zskr.cn/news/56399.html

相关文章:

  • 技术架构进化论:从“独栋别墅”到“智慧城市”
  • 2025 年最新推荐套袋机厂家权威榜单:聚焦技术创新与专利优势,覆盖多品类设备选型指南M 型袋套袋机/预制袋套袋机/袋中袋套袋机/食品套袋机/八边封套袋机公司推荐
  • UBUNTU22.04,配置wine中调用cuda
  • MySQL 8.0.12 时区设置和修改
  • 记录双系统笔记本系统损坏恢复步骤
  • 中电金信与中国金融科技的共振之路
  • 题解:NFLSOI#31351. 小吃
  • xilinx在线升级+flash操作+N25Q128
  • Day23、24:2025年10月13日、14日,星期一、二,休息。
  • gdb安装 linux
  • 2025 年评价高的四川自助洗车机厂家实力及用户口碑排行榜
  • Day18:2025年10月8日,星期三,值班,平安顺遂。
  • 【Springer|EI、SCOPUS双检索】第三届人工智能安全与隐私国际学术会议(AISP 2025)
  • C++ 中打开记录的多种方式及相关流类
  • 小泉刀拍蒜断刀事件分析:老字号的危机与出路‌
  • OceanBase Session ID 之谜
  • 2025 最新装修公司品牌推荐排行榜:高端环保 / 收纳设计 / 别墅大平层专属口碑企业精选苏州装修 / 全屋定制 / 环保 / 金属橱柜 / 铝合金橱柜装修公司推荐
  • 2025年管材激光切割机厂家权威推荐榜单:全自动激光切割机/大型激光切割机/光纤激光切割机源头厂家精选
  • 2025年实木家具定制厂家权威推荐榜单:全屋定制板材/环保板材/颗粒板源头厂家精选
  • 2025推荐 有限元仿真/FEA分析第三方外包机构排行榜:蓝图心算科技全链路生态解决方案助力仿真赋能丨流体仿真丨结构仿真丨CFD仿真
  • 2025年校园安检门定制厂家权威推荐榜单:公安局安检门/法院安检门/博物馆安检门源头厂家精选
  • 2025年市场上烤鸭饼机生产厂家排行榜:安徽惠众食品机械制造有限公司领跑行业
  • 2025年烤鸭饼机工厂推荐排行榜:安徽惠众食品机械领跑行业
  • 2025 年 11 月陕西包装盒,礼盒包装盒,西安包装盒厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 行业内排行前列的3A信用认证代理哪家专业,3A信用认证/3A信用等级认证/产品测试报告/3A信用认证申请找哪家
  • 2025 年 11 月烘焙食品包装盒,烘焙包装盒订制,月饼盒包装盒厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 2025 年 11 月注塑厂家推荐排行榜,塑胶注塑,模具注塑,精密注塑,定制注塑公司推荐,专业工艺与高效生产口碑之选
  • 告别云端依赖!ComfyUI本地化视频生成实战教程+cpolar实战 - 教程
  • Windows10 开启FTP配置
  • Day3:2025年9月24日,星期三,上班。