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

题解:洛谷 P1099 [NOIP 2007 提高组] 树网的核

【题目来源】

洛谷:[P1099 NOIP 2007 提高组] 树网的核 - 洛谷

【题目描述】

\(T\)\(=\)\((V,E,W)\) 是一个无圈且连通的无向图(也称为无根树),每条边都有正整数的权,我们称 \(T\) 为树网(treenetwork),其中 \(V\)\(E\) 分别表示结点与边的集合,\(W\) 表示各边长度的集合,并设 \(T\)\(n\) 个结点。

路径:树网中任何两结点 \(a\)\(b\) 都存在唯一的一条简单路径,用 \(d(a,b)\) 表示以 \(a,b\) 为端点的路径的长度,它是该路径上各边长度之和。我们称 \(d(a,b)\)\(a,b\) 两结点间的距离。

\(D(v,P)=min\{d(v,u)\}\), \(u\) 为路径 \(P\) 上的结点。

树网的直径:树网中最长的路径称为树网的直径。对于给定的树网 T,直径不一定是唯一的,但可以证明:各直径的中点(不一定恰好是某个结点,可能在某条边的内部)是唯一的,我们称该点为树网的中心。

偏心距 \(ECC(F)\):树网 \(T\) 中距路径 \(F\) 最远的结点到路径 \(F\) 的距离,即

\(ECC(F)=max\{D(v,F),v∈V\}\)

任务:对于给定的树网 \(T=(V,E,W)\) 和非负整数 \(s\),求一个路径 \(F\),他是某直径上的一段路径(该路径两端均为树网中的结点),其长度不超过 \(s\)(可以等于 \(s\)),使偏心距 \(ECC(F)\) 最小。我们称这个路径为树网 \(T=(V,E,W)\) 的核(Core)。必要时,\(F\) 可以退化为某个结点。一般来说,在上述定义下,核不一定只有一个,但最小偏心距是唯一的。

下面的图给出了树网的一个实例。图中,\(A−B\)\(A−C\) 是两条直径,长度均为 \(20\)。点 \(W\) 是树网的中心,\(EF\) 边的长度为 \(5\)。如果指定 \(s=11\),则树网的核为路径DEFG(也可以取为路径DEF),偏心距为 \(8\)。如果指定 \(s=0\)(或 \(s=1\)\(s=2\)),则树网的核为结点 \(F\),偏心距为 \(12\)

image

【输入】

\(n\) 行。

\(1\) 行,两个正整数 \(n\)\(s\),中间用一个空格隔开。其中 \(n\) 为树网结点的个数,\(s\) 为树网的核的长度的上界。设结点编号以此为 \(1,2…,n\)

从第 \(2\) 行到第 \(n\) 行,每行给出 \(3\) 个用空格隔开的正整数 \(u,v,w\),依次表示每一条边的两个端点编号和长度。例如,2 4 7 表示连接结点 \(2\)\(4\) 的边的长度为 \(7\)

【输出】

一个非负整数,为指定意义下的最小偏心距。

【输入样例】

5 2
1 2 5
2 3 2
2 4 4
2 5 3

【输出样例】

5

【算法标签】

《洛谷 P1099 树网的核》 #模拟# #动态规划DP# #树形数据结构# #枚举# #最短路# #NOIP提高组# #2007#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 305;  // 最大节点数int n;              // 节点数量
int s;              // 路径长度限制
int u, v, w;        // 临时变量:起点、终点、权重
int vis[N];         // 访问标记数组
int st, ed;         // 起点和终点
int dist[N];        // 距离数组
int maxx;           // 最大距离
int router[N];      // 存储最长路径
int router_t[N];    // 临时存储路径
int len, len_t;     // 路径长度
int ans;            // 最终答案
int color[N];       // 标记是否在核心路径上vector<int> ve[N];  // 邻接表存储连接关系
vector<int> wi[N];  // 邻接表存储权重// 第一次DFS:找到树的直径的一个端点
void dfs_1(int x, int y)
{// 更新最长路径if (y > maxx){len = len_t;memcpy(router, router_t, sizeof(router)); // 复制路径maxx = y;}// 遍历所有邻接节点for (int i = 0; i < ve[x].size(); i++){int tmp_v = ve[x][i];if (vis[tmp_v])continue;// 更新距离和路径dist[tmp_v] = y + wi[x][i];vis[tmp_v] = 1;len_t++;router_t[len_t] = tmp_v;// 递归搜索dfs_1(tmp_v, y + wi[x][i]);// 回溯vis[tmp_v] = 0;len_t--;}
}// 第二次DFS:计算从核心路径出发的最远距离
void dfs_2(int x)
{// 更新最大距离ans = max(ans, dist[x]);// 遍历所有邻接节点for (int i = 0; i < ve[x].size(); i++){int tmp_v = ve[x][i];if (vis[tmp_v] || color[tmp_v])continue;// 更新距离并继续搜索vis[tmp_v] = 1;dist[tmp_v] = dist[x] + wi[x][i];dfs_2(tmp_v);// 回溯vis[tmp_v] = 0;}return;
}int main()
{// 输入节点数和路径长度限制cin >> n >> s;// 构建邻接表for (int i = 1; i < n; i++){cin >> u >> v >> w;ve[u].push_back(v);wi[u].push_back(w);ve[v].push_back(u);wi[v].push_back(w);}// 第一次DFS:找到直径的一个端点st = 1;vis[st] = 1;router_t[++len_t] = st;dfs_1(st, 0);// 第二次DFS:找到直径的另一个端点st = router[len];memset(vis, 0, sizeof(vis));memset(dist, 0, sizeof(dist));memset(router, 0, sizeof(router));memset(router_t, 0, sizeof(router_t));len = len_t = 0;len_t = 1;router_t[len_t] = st;maxx = 0;vis[st] = 1;dfs_1(st, 0);ed = router[len];// 寻找最优的核心路径ans = 1e9;for (int i = 1; i <= len; i++){for (int j = i; j <= len; j++){if (dist[router[j]] - dist[router[i]] > s)break;// 计算当前路径的最大偏心距int t = max(dist[router[i]], dist[router[len]] - dist[router[j]]);if (t < ans){ans = t;st = i;ed = j;}}}// 标记核心路径上的节点for (int i = st; i <= ed; i++)color[router[i]] = 1;// 从核心路径上的每个节点出发,计算最远距离for (int i = st; i <= ed; i++){memset(vis, 0, sizeof(vis));memset(dist, 0, sizeof(dist));vis[router[i]] = 1;dfs_2(router[i]);}// 输出最小偏心距cout << ans << endl;return 0;
}

【运行结果】

8 6
1 3 2
2 3 2
3 4 6
4 5 3
4 6 4
4 7 2
7 8 3
5
http://www.jsqmd.com/news/394602/

相关文章:

  • 闲置支付宝立减金别浪费!合规回收方法来了,新手也能轻松上手 - 可可收
  • Python3教程梳理
  • 题解:洛谷 P5908 猫猫和企鹅
  • 题解:洛谷 P5677 [GZOI2017] 配对统计
  • 2026沸石转轮一体机企业TOP榜:哪些品牌值得关注?催化燃烧/旋风除尘器/除尘器,沸石转轮制造厂家排行榜单 - 品牌推荐师
  • 瑞祥商联卡闲置不用?这样的合规回收方式,新手也能轻松上手 - 可可收
  • 2026年值得推荐的AVIF转WebP在线工具盘点(支持批量转换)
  • 微信立减金回收技巧:47%闲置率下,5招盘活你的“隐形财富” - 可可收
  • 2026年溴化锂中央空调选购指南:值得关注的公司,溴化锂冷水机组/二手溴化锂中央空调,溴化锂中央空调制造企业有哪些 - 品牌推荐师
  • PAM4相关概念
  • 2026年行业内评价高的调节阀厂商如何选,电液动盲板阀/蝶式止回阀/微阻缓闭止回阀/伸缩蝶阀,调节阀生产厂家哪家权威 - 品牌推荐师
  • 2026年中考体育训练新趋势:智慧体育制造企业深度解析,智能运动手环管理平台/握力测试仪,智慧体育生产厂家哪家好 - 品牌推荐师
  • 闲置分期乐购物额度用不上?教你安全高效回收,不浪费一分额度 - 可可收
  • 题解:洛谷 P1631 序列合并
  • 题解:洛谷 P4053 [JSOI2007] 建筑抢修
  • 题解:洛谷 P2161 [SHOI2009] 会场预约
  • 书籍-阿尔伯特·赫尔曼《亚洲古代地理学》
  • IndicEval A Bilingual Indian Educational Evaluation Framework for Large Language Models
  • 2026年上海有实力的宠物口腔医生口碑推荐榜,猫咪牙科/牙科专科/狗狗洗牙/狗口腔溃疡诊疗,宠物口腔医生性价比高的推荐 - 品牌推荐师
  • MultiCW A Large-Scale Balanced Benchmark Dataset for Training Robust Check-Worthiness Detection Mode
  • 题解:洛谷 P3368 【模板】树状数组 2
  • 2026年安徽评价好的家教机构选哪家,大学生家教/小学家教/全托一对一/全托补习班/师范家教/家教,家教机构电话 - 品牌推荐师
  • 题解:洛谷 P3374 【模板】树状数组 1
  • 题解:洛谷 P2085 最小函数值
  • 实用指南:FreeRTOS信号量
  • 看完就会:AI论文写作软件 千笔·专业学术智能体 VS 文途AI,MBA专属神器!
  • 日程邀请类钓鱼邮件攻击深度技术解读与防范
  • 宿主系统产品定义
  • 毕业论文神器 8个AI论文写作软件测评:本科生高效写作与格式规范全攻略
  • 省心了! 降AI率网站 千笔AI VS speedai,本科生专属降重神器!