如果一个点开始遍历一棵树再回到原点那么每条边走两次。

现在是两个人从同一点出发,那么最后遍历完以后两人离得越远越好。

最后两人所处位置的路径上的边走了一次,其他边走了两次。

要使总路程最小,两人最后停在直径两端。

所以最终答案就是总权值*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 ;
}

代码君

最新文章

  1. [转]vb socket通信(TCP/UDP)一对一、多对一
  2. NVelocity用法(转)
  3. 脚本工具: 查看当前系统被写入的FD
  4. Java后端WebSocket的Tomcat实现
  5. 数据结构 《5》----二叉搜索树 ( Binary Search Tree )
  6. c# winform 点菜宝接口demo程序
  7. [Cache] C#操作缓存--CacheHelper缓存帮助类 (转载)
  8. MSSQL查询所有数据库表,指定数据库的字段、索引
  9. 记录一个原因不明的段错误(libxml2 proc activemq的三角恋)
  10. YII2.0 数据库增删改查
  11. how to add a shared lib in C?
  12. 用《VisualStudio命令提示》生成WSDL客户端文件
  13. html细节积累-01
  14. iOS开发之UITabBarController
  15. Css元素居中设置
  16. SpringBoot中过滤器、监听器以及拦截器
  17. SDK踩坑全纪录
  18. PythonStudy——nonlocal关键字
  19. sizeof和strlen区别(转)
  20. Java基础五(方法)

热门文章

  1. Expert Python programming - Reading Notes
  2. STM32的低功耗模式
  3. C51 笔记
  4. C#入门笔记3 表达式及运算符
  5. Java基础50题test1—不死神兔
  6. 我也质疑下petshop
  7. uvm_reg_defines——寄存器模型(四)
  8. MyBatis插入数据之后返回插入记录的id
  9. EJB开发基础——EJB规范
  10. C# 分支语句 练习题