POJ 1849 树的直径 Two
2024-09-25 06:47:26
如果一个点开始遍历一棵树再回到原点那么每条边走两次。
现在是两个人从同一点出发,那么最后遍历完以后两人离得越远越好。
最后两人所处位置的路径上的边走了一次,其他边走了两次。
要使总路程最小,两人最后停在直径两端。
所以最终答案就是总权值*2 - 树的直径
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std; const int maxn = + ; int n, s;
vector<int> G[maxn], C[maxn]; int len, id; void dfs(int u, int fa, int d)
{
if(d > len) { len = d; id = u; }
for(int i = ; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == fa) continue;
dfs(v, u, d + C[u][i]);
}
} int main()
{
while(scanf("%d%d", &n, &s) == )
{
for(int i = ; i <= n; i++) { G[i].clear(); C[i].clear(); } int sum = ;
for(int i = ; i < n; i++)
{
int u, v, d; scanf("%d%d%d", &u, &v, &d);
sum += d * ;
G[u].push_back(v); C[u].push_back(d);
G[v].push_back(u); C[v].push_back(d);
} int a;
len = -;
dfs(, , );
len = -;
a = id;
dfs(a, , ); printf("%d\n", sum - len);
} return ;
}
代码君
最新文章
- [转]vb socket通信(TCP/UDP)一对一、多对一
- NVelocity用法(转)
- 脚本工具: 查看当前系统被写入的FD
- Java后端WebSocket的Tomcat实现
- 数据结构 《5》----二叉搜索树 ( Binary Search Tree )
- c# winform 点菜宝接口demo程序
- [Cache] C#操作缓存--CacheHelper缓存帮助类 (转载)
- MSSQL查询所有数据库表,指定数据库的字段、索引
- 记录一个原因不明的段错误(libxml2 proc activemq的三角恋)
- YII2.0 数据库增删改查
- how to add a shared lib in C?
- 用《VisualStudio命令提示》生成WSDL客户端文件
- html细节积累-01
- iOS开发之UITabBarController
- Css元素居中设置
- SpringBoot中过滤器、监听器以及拦截器
- SDK踩坑全纪录
- PythonStudy——nonlocal关键字
- sizeof和strlen区别(转)
- Java基础五(方法)