Codeforces Round #526 D - The Fair Nut and the Best Path /// 树上两点间路径花费
题目大意:
给定一棵树 树上每个点有对应的点权
树上每条边有对应的边权
经过一个点可得到点权 经过一条边必须花费边权
即从u到v 最终得分=u的点权-u到v的边权+v的点权
求树上一条路径使得得分最大
看注释
#include <bits/stdc++.h>
#define LL long long
#define INf 0x3f3f3f3f
using namespace std;
const int N=3e5+;
bool vis[N];
LL w[N], ans;
int n;
struct NODE { int to,nt; LL l; }e[N<<];
int head[N], tot;
void addE(int u,int v,LL l) {
e[tot].to=v, e[tot].l=l;
e[tot].nt=head[u];
head[u]=tot++;
}
void init() {
memset(head,,sizeof(head));
tot=;
}
LL dfs(int u,int fa) {
vis[u]=;
LL ans1=0LL, ans2=0LL;
// ans1由子节点出发的一条路径最大得分 ans2为次大
for(int i=head[u];i;i=e[i].nt) {
int v=e[i].to;
if(v==fa || vis[v]) continue;
LL tmp=dfs(v,u)-e[i].l;
if(tmp>ans1) swap(tmp,ans1);
if(tmp>ans2) swap(tmp,ans2);
}
ans=max(ans,ans1+ans2+w[u]);
// 可由最大得分和次大得分加上u点 得到一条经过u点的路径的最大得分
return ans1+w[u]; // 只返回由u出发的一条路径可得到的最大得分
}
int main()
{
while(~scanf("%d",&n)) {
for(int i=;i<=n;i++) scanf("%I64d",&w[i]);
init();
for(int i=;i<n;i++) {
int u,v; LL l;
scanf("%d%d%I64d",&u,&v,&l);
addE(u,v,l); addE(v,u,l);
}
memset(vis,,sizeof(vis));
ans=0LL;
dfs(,);
printf("%I64d\n",ans);
} return ;
}
Codeforces Round #526 D - The Fair Nut and the Best Path /// 树上两点间路径花费的更多相关文章
- Codeforces Round #526 C - The Fair Nut and String /// 组合递推
题目大意: 给定原字符序列 找出其中所有子序列满足 1.序列内字符都为a 2.若有两个以上的字符 则相邻两个字符在原序列中两者之间存在字符b 的数量 将整个字符序列用b分开 此时再得到每个b之间a的数 ...
- Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path 树上dp
D. The Fair Nut and the Best Path 题意:给出一张图 点有权值 边也要权值 从任意点出发到任意点结束 到每个点的时候都可以获得每个点的权值,而从边走的时候都要消耗改边的 ...
- CodeForces 1084D The Fair Nut and the Best Path
The Fair Nut and the Best Path 题意:求路径上的 点权和 - 边权和 最大, 然后不能存在某个点为负数. 题解: dfs一遍, 求所有儿子走到这个点的最大值和次大值. 我 ...
- Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path
D. The Fair Nut and the Best Path 题目链接:https://codeforces.com/contest/1084/problem/D 题意: 给出一棵树,走不重复的 ...
- Codeforces Round #526 (Div. 2) Solution
A. The Fair Nut and Elevator Solved. 签. #include <bits/stdc++.h> using namespace std; #define ...
- Codeforces Round #526 (Div. 1)
毕竟是上紫之后的第一场div1,还是太菜了啊,看来我要滚回去打div2了. A. The Fair Nut and the Best Path 这题本来是傻逼贪心dfs,结果我越写越麻烦,然后就只有1 ...
- CF 1083 A. The Fair Nut and the Best Path
A. The Fair Nut and the Best Path https://codeforces.com/contest/1083/problem/A 题意: 在一棵树内找一条路径,使得从起点 ...
- CF1083A The Fair Nut and the Best Path
CF1083A The Fair Nut and the Best Path 先把边权搞成点权(其实也可以不用),那么就是询问树上路径的最大权值. 任意时刻权值非负的限制可以不用管,因为若走路径 \( ...
- Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上两两节点之间gcd的和
Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上两两节点之间gcd的和 [Problem Description ...
随机推荐
- Kibana < 6.6.1 代码执行漏洞复现CVE-2019-7609
登陆kibana poc .es(*).props(label.__proto__.env.AAAA='require("child_process").exec("ba ...
- 在VMware软件下创建CentOs虚拟机
1.创建新的虚拟机. 打开VMware软件,点击主页内创建新的虚拟机 2.进入新建虚拟机向导 点击典型,点击下一步 3.在下一步中单击稍后安装操作系统 点击下一步 4.选择操作系统类型 因为CentO ...
- CSS中复选框单选框与常用12px文字不对齐问题(转载)
原文 http://www.cnblogs.com/aobingyan/p/3823556.html,有删改 目前中文网站上面的文字,绝大多数网站的主流文字大小为12px,因为在目前高分辨率显示器屏 ...
- form编码方式application/x-www-form-urlencoded和multipart/form-data的区别?
application/x-www-form-urlencoded: 表单数据编码为键值对,&分隔 multipart/form-data: 表单数据编码为一条消息,每个控件对应消息的一部分 ...
- webpack 配置之入门二(css 篇)
在项目中我们通过 css 来美化页面,css 也成为了网站不可或缺的一部分,这章节主要介绍 webpack 处理 css 部分, 1.webpack 处理 css 在 webpack 中,我们通过 s ...
- ADS 命令行命令介绍
armasm 1. 命令:armasm [选项] -o 目标文件 源文件 2. 选项说明 -Errors 错误文件名 ;指定一个错误输出文件 -I 目录[,目录] ;指 ...
- UVA11427 Expect the Expected 概率dp+全概率公式
题目传送门 题意:小明每晚都玩游戏,每一盘赢的概率都是p,如果第一盘就赢了,那么就去睡觉,第二天继续玩:否则继续玩,玩到赢的比例大于p才去睡:如果一直玩了n盘还没完成,就再也不玩了:问他玩游戏天数的期 ...
- lib 和 dll 的区别、生成以及使用详解 ~~包含示例代码~~(转)
原文章地址:https://www.cnblogs.com/TenosDoIt/p/3203137.html#c 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方 ...
- vue v-for 组件传值 enter传值
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- rasa学习(domain.yml、nlu.md、stories.md)(一)
一. 什么是rasa Rasa是一个用于自动文本和基于语音的对话的开源机器学习框架.了解消息,保持对话以及连接到消息传递通道和API Rasa分为Rasa core和 Rasa nlu两部分: Ras ...