luogu1131 [ZJOI2007][时态同步]
来源:互联网 发布:node.js 微信 编辑:程序博客网 时间:2024/06/05 07:00
树形DP
f [i]表示 i 的子树更新上来的最大值
f [i] = max ( f [i] , f [v] + w )
ans += f [i] - f [v] - w
#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL long longconst int N = 5e5 + 100 ;struct Edge{ int v , w ; Edge ( int x=0 , int y=0 ) : v(x) , w(y) {} };vector <Edge> edges ;vector <int> G [N] ;void addeage ( int u , int v , int w ) { edges.push_back ( Edge ( v , w ) ) ; int tot = edges.size () ; G [u].push_back ( tot-1 ) ;}int f [N] , vis [N] ;void dfs ( int u ) { vis [u] = 1 ; for ( int i = 0 ; i < G [u].size () ; ++ i ) { Edge e = edges [ G [u] [i] ] ; if ( vis [e.v] ) continue ; dfs ( e.v ) ; f [u] = max ( f [u] , f [e.v] + e.w ) ; }}LL ans = 0 ;void dfa ( int u ) { vis [u] = 1 ; for ( int i = 0 ; i < G [u].size () ; ++ i ) { Edge e = edges [ G [u] [i] ] ; if ( vis [e.v] ) continue ; dfa ( e.v ) ; ans += f [u] - ( f [e.v] + e.w ) ; }}int main () { int n , root ; scanf ( "%d%d" , &n , &root ) ; for ( int i = 1 ; i < n ; ++ i ) { int x , y , z ; scanf ( "%d%d%d" , &x , &y , &z ) ; addeage ( x , y , z ) ; addeage ( y , x , z ) ; } dfs ( root ); memset ( vis , 0 , sizeof vis ) ; dfa ( root ); printf ( "%lld" , ans ); return 0 ;}
阅读全文
0 0
- luogu1131 [ZJOI2007][时态同步]
- [BZOJ1060] [ZJOI2007]时态同步
- Tyvj1856[ZJOI2007] 时态同步
- bzoj1060: [ZJOI2007]时态同步
- [ZJOI2007]时态同步
- bzoj1060[ZJOI2007] 时态同步
- bzoj1060: [ZJOI2007]时态同步
- 1060: [ZJOI2007]时态同步
- [ZJOI2007] 时态同步
- BZOJ1060[ZJOI2007]时态同步
- BZOJ1060 [ZJOI2007]时态同步
- [ZJOI2007]时态同步
- [ZJOI2007]时态同步
- bzoj1060 [ZJOI2007]时态同步
- P1131 [ZJOI2007]时态同步
- bzoj1060 [ZJOI2007]时态同步
- 【BZOJ1060】【ZJOI2007】时态同步
- bzoj1060: [ZJOI2007]时态同步
- MOOC-Python网络爬虫与信息提取-第二周 BeautifulSoup库入门与信息提取方法
- leetcode 46. Permutations
- 什么是腾讯安全探索论坛(TSec)?
- 有了《网络安全法》,个人信息就更加安全了吗?
- 黄仁勋说摩尔定律已死,Nvidia要用人工智能应对
- luogu1131 [ZJOI2007][时态同步]
- 折纸问题(递归java)
- 如何快速转发CSDN博客
- JDK动态代理
- fiddler网络抓包神器的使用介绍
- 递归 输出全排列
- java 类型转换
- 算法分析与设计课程作业第七周#1#2
- 使用Disruptor的几个代码演示