luogu 1131
来源:互联网 发布:windows快速打开程序 编辑:程序博客网 时间:2024/06/11 09:26
#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 500010using namespace std;long long n, s, dis[MAXN], vis[MAXN], now[MAXN];long long ans, x, y, z, cnt;struct E { long long from, to, nxt, vl;} es[MAXN];long long read() { long long f = 1, k = 0 ; char c = getchar(); while(c > '9' || c < '0') { if(c == '-') { f = -1; } c = getchar(); } while(c <= '9' && c >= '0') { k = k * 10 + c - '0'; c = getchar(); } return f * k;}void addedge(long long a, long long b, long long c) { es[++cnt].from = a; es[cnt].to = b; es[cnt].vl = c; es[cnt].nxt = now[a]; now[a] = cnt;}long long dfs(long long a) { long long sum = 0, maxx = 0; vis[a] = 1; for(int i = now[a]; i != 0; i = es[i].nxt) { if(!vis[es[i].to]) { sum ++; dis[es[i].to] = dis[a] + es[i].vl; dfs(es[i].to); if(maxx > dis[es[i].to]) { ans += maxx - dis[es[i].to]; } else { if(sum == 1) { maxx = dis[es[i].to]; } else { ans += (sum - 1) * (dis[es[i].to] - maxx); maxx = dis[es[i].to]; } } } } dis[a] = max(dis[a], maxx);}int main() { n = read(); s = read(); for(int i = 1; i < n; i ++) { x = read(), y = read(), z = read(); addedge(x, y, z); addedge(y, x, z); } dis[s] = 0; dfs(s); printf("%lld", ans); return 0;}
阅读全文
0 0
- luogu 1131
- CJOJ 1131 机器分配/Luogu 2066 机器分配
- luogu 3478 bzoj 1131 poi2008 sta 树形dp
- Luogu 1197
- 【Luogu】 食物链
- lUOGU P1540
- luogu 1313
- luogu 1082
- luogu 1024
- luogu 1044
- luogu 1072
- luogu 1063
- luogu 1040
- luogu 选课
- luogu 1514
- luogu 1053
- luogu p1145
- luogu 2986
- php 数组排序函数对比
- java学习-操作符
- Java总结之——网络编程
- 前端——滚动条
- curl -X post http://localhost:8888/bus/refresh throws HttpRequestMethodNotSupportedException "post"
- luogu 1131
- GOJ 1454 计算24点
- solr学习日记···索引
- POJ 2031.Building a Space Station
- 解决centos6上python升级混乱导致yum报错 -bash: /usr/bin/yum: /usr/bin/python
- 几大内部排序算法
- SparkSQL根据条件合并多条数据(测试)
- centos6.5-oracle_11R安装
- SWIG c++ -> java 转换byte[] 的关键代码