题目

现在有一棵n个点的无向树,每个点的编号在1-n之间,求出每个点所在的最长路。

思路

换根 \(dp\),这里只是记下怎么打

\(Code\)

#include<cstdio>
#include<iostream>
using namespace std; const int N = 1e5;
int n , h[N + 5] , tot , f1[N + 5] , f2[N + 5] , g1[N + 5] , g2[N + 5]; struct edge{
int nxt , to , w;
}e[2 * N + 5]; inline void add(int u , int v , int w)
{
e[++tot].to = v;
e[tot].w = w;
e[tot].nxt = h[u];
h[u] = tot;
} inline void dfs1(int u , int fa)
{
for(register int i = h[u]; i; i = e[i].nxt)
{
int v = e[i].to;
if (v == fa) continue;
dfs1(v , u);
if (f1[v] + e[i].w > f1[u]) f2[u] = f1[u] , f1[u] = f1[v] + e[i].w;
else if (f1[v] + e[i].w > f2[u]) f2[u] = f1[v] + e[i].w;
}
} inline void dfs2(int u , int fa)
{
for(register int i = h[u]; i; i = e[i].nxt)
{
int v = e[i].to;
if (v == fa) continue;
if (f1[v] + e[i].w == g1[u])
{
if (g2[u] + e[i].w > f1[v]) g1[v] = g2[u] + e[i].w , g2[v] = f1[v];
else g2[v] = g2[u] + e[i].w , g1[v] = f1[v];
}
else {
if (g1[u] + e[i].w > f1[v]) g1[v] = g1[u] + e[i].w , g2[v] = f1[v];
else g2[v] = g1[u] + e[i].w , g1[v] = f1[v];
}
g1[v] = max(g1[v] , f1[v]) , g2[v] = max(g2[v] , f2[v]);
dfs2(v , u);
}
} int main()
{
freopen("tree.in" , "r" , stdin);
freopen("tree.out" , "w" , stdout);
scanf("%d" , &n);
int u , v , w;
for(register int i = 1; i < n; i++)
{
scanf("%d%d%d" , &u , &v , &w);
add(u , v , w) , add(v , u , w);
}
dfs1(1 , 0);
g1[1] = f1[1] , g2[1] = f2[1];
dfs2(1 , 0);
for(register int i = 1; i <= n; i++) printf("%d\n" , g1[i] + g2[i]);
}

最新文章

  1. PHP之初识PHP(1)
  2. centos设置静态IP
  3. [curator] Netflix Curator 使用
  4. jQuery应用之(一)使用jQuery选择器(荐)
  5. Android 时间格式的正则表达式
  6. MAC OSX 下安装 CTAGS
  7. 数据库MySQL常用命令复习
  8. MongoDB,HDFS, Spark to 电影推荐
  9. 通过WebClient/HttpWebRequest实现http的post/get方法
  10. Entrez检索实例 - NCBI
  11. Android 一个改进的okHttp封装库
  12. JavaScript的实现
  13. 我是实践派之mongo的一主多从
  14. NPOI导出WPF DataGrid控件显示数据
  15. java开发环境配置——IDEA SVN的使用
  16. 本地存储localStorage sessionStorage 以及 session 和cookie的对比和使用
  17. MySQL5.7.17解压版安装
  18. asp.net 本地服务字段调用(WebSerice)的小问题
  19. IDEA控制台问题:java lang OutOfMemoryError:PermGen space
  20. HttpRunner 接口自动化简单实践

热门文章

  1. 踩坑记录:Redis的lettuce连接池不生效
  2. uni-app 动态修改主题色
  3. A_A01_001 KEIL4-KEIL5软件安装
  4. 数据结构 传统链表实现与Linux内核链表
  5. HNCTF的pyjail做题过程详解
  6. $_GET方法踩坑
  7. 就聊聊不少小IT公司的技术总监
  8. 单向绑定vs双向绑定、单向数据流vs双向数据流
  9. Maven项目中导入坐标依赖时报(Failure to transfer....)的错的问题
  10. JS原生上传文件,读取文件格式,控制文件只可以上传某些格式,并使用fileReader转换格式