中南大学oj 1317 Find the max Link 边权可以为负的树上最长路 树形dp 不能两遍dfs
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1317
经典问题:
树上最长路,边权可以为负值的,树形dp,不能用两边dfs。
反例:
5 4
1 2 2
2 3 1
2 4 -100
4 5 10
写树形dp的时候,WA了好多次,错误在于:
记录单链的时候,一个节点的最长单链不一定等于:边权+孩子的最长单链
还可以不选孩子,只要边权就行!!!!!!
如果边权非负的话,就是 边权+孩子的最长单链 了。
思路:
dp[u][0],记录的是以u为根结点的子树中的最长路
dp[u][1],记录的是以u为起点的向下的一条最长链
转移时:
a记录的是max{ dp[sons][0] }
b和c记录的分别是dp[sons][1]的最大值和次大值
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
const int N = ;
typedef long long LL;
LL inf = N * 100000ll; inline LL max(LL a,LL b) {return a>b?a:b;}
inline LL max(LL a,LL b,LL c) {return (a>b?a:b)>c?(a>b?a:b):c;} LL dp[N][];
vector<int> G[N];
struct edge
{
int to,w;
}edges[*N]; void dfs(int u,int fa)
{
int sz=G[u].size(),v,w;
LL temp;
LL a=-inf,b=-inf,c=-inf;
for(int i=;i<sz;i++)
{
v = edges[G[u][i]].to;
w = edges[G[u][i]].w;
if( v!=fa )
{
dfs(v,u);
temp = max(dp[v][]+w,w);
a = max(a,dp[v][]);
if( temp > b )
{
c = b;
b = temp;
}
else if( temp > c )
c = temp;
}
}
dp[u][]=max(a,b,b+c);
dp[u][]=b;
} int main()
{
int n,m;
int u,v,w; while( ~scanf("%d%d",&n,&m) )
{
for(int i=;i<=n;i++) G[i].clear();
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
edges[i].to = v;
edges[i+m].to = u;
edges[i].w = edges[i+m].w = w;
G[u].push_back(i);
G[v].push_back(i+m);
}
dfs(,);
LL ans = -inf;
for(int i=;i<=n;i++)
ans = max(ans,dp[i][]);
printf("%lld\n",ans);
//cout<<ans<<endl;
}
return ;
}
中南大学oj 1317 Find the max Link 边权可以为负的树上最长路 树形dp 不能两遍dfs的更多相关文章
- ZJK的黑OJ(树的最大独立集)(树形DP)
ZJK的黑OJ zjk开了一家"善良OJ".这其实是家黑OJ.每AC一道题,网站便会自动在电脑上安装一种木马.zjk通过窃取信息获取收益(如网游帐号.OI资料.和KK的照片等等). ...
- 杭电OJ——1011 Starship Troopers(dfs + 树形dp)
Starship Troopers Problem Description You, the leader of Starship Troopers, are sent to destroy a ba ...
- hdu Anniversary party 树形DP,点带有值。求MAX
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 中南大学oj:1336: Interesting Calculator(广搜经典题目)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336 There is an interesting calculator. It has 3 r ...
- 中南大学oj:1352: New Sorting Algorithm
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1352 题意:就是要将7 1 5 2这样的序列变成1 2 5 7最少需要多少步?给出变的规律, ...
- Light OJ 1317 Throwing Balls into the Baskets 概率DP
n个人 m个篮子 每一轮每一个人能够选m个篮子中一个扔球 扔中的概率都是p 求k轮后全部篮子里面球数量的期望值 依据全期望公式 进行一轮球数量的期望值为dp[1]*1+dp[2]*2+...+dp[ ...
- light oj 1317
Description You probably have played the game "Throwing Balls into the Basket". It is a si ...
- hdu oj 1520 Anniversary party(树形dp入门)
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- [HDU 1317]XYZZY[SPFA变形][最长路]
题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...
随机推荐
- js中的异常处理try...catch使用介绍
在JavaScript可以使用try...catch来进行异常处理. 例如: try { foo.bar();} catch (e) { alert(e.name + ": " + ...
- liger 的 ligerDialog 的使用。
/// 查看页面,跳出一个新的添加窗口 function AddMessage() { $.ligerDialog.open({ url: UrlAddMessage, height: , width ...
- C# 学习之旅(1)
第一, 输入输出流都来自控制台. using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- Kakfa揭秘 Day3 Kafka源码概述
Kakfa揭秘 Day3 Kafka源码概述 今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行.由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的. ...
- 域名转化到IP地址的实现
在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname().gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化.其中geth ...
- Nginx配置文件变量大全
$args # 这个变量等于请求行中的参数. $binary_remote_addr # 远程地址的二进制表示 $body_bytes_sent # 已发送的消息体字节数 $content_lengt ...
- GridView控件RowDataBound事件中获取列字段值的几种途径
前台: <asp:TemplateField HeaderText="充值总额|账号余额"> <ItemTemplate> <asp:Label ID ...
- ISoft(开源)专用下载器
继 两年的坚持,最后还是决定将ISoft开源 之后,今天再共享一款ISoft专用下载器小工具.这款工具是一年前开发的,也是一直闲置着没去扩展更新.当时开发出来就是仿穿越火线专用下载器的样式来做的,现在 ...
- Python拷贝及多进程与类的问题
最近写python写的尤其不顺利,更多的debug,逐渐的深入,产出却比较少.应该是个瓶颈期,坚持坚持,厚着脸皮也要坚持下去. 0x00 拷贝问题 程序中涉及到多进程和协程,大致的模型是开了2+个进程 ...
- ITaCS Change Password web part
http://changepassword.codeplex.com/ A webpart is used to change your sharepoint AD password.