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的更多相关文章

  1. ZJK的黑OJ(树的最大独立集)(树形DP)

    ZJK的黑OJ zjk开了一家"善良OJ".这其实是家黑OJ.每AC一道题,网站便会自动在电脑上安装一种木马.zjk通过窃取信息获取收益(如网游帐号.OI资料.和KK的照片等等). ...

  2. 杭电OJ——1011 Starship Troopers(dfs + 树形dp)

    Starship Troopers Problem Description You, the leader of Starship Troopers, are sent to destroy a ba ...

  3. hdu Anniversary party 树形DP,点带有值。求MAX

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  4. 中南大学oj:1336: Interesting Calculator(广搜经典题目)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336 There is an interesting calculator. It has 3 r ...

  5. 中南大学oj:1352: New Sorting Algorithm

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1352 题意:就是要将7 1 5 2这样的序列变成1  2  5  7最少需要多少步?给出变的规律, ...

  6. Light OJ 1317 Throwing Balls into the Baskets 概率DP

    n个人 m个篮子 每一轮每一个人能够选m个篮子中一个扔球 扔中的概率都是p 求k轮后全部篮子里面球数量的期望值 依据全期望公式 进行一轮球数量的期望值为dp[1]*1+dp[2]*2+...+dp[ ...

  7. light oj 1317

    Description You probably have played the game "Throwing Balls into the Basket". It is a si ...

  8. hdu oj 1520 Anniversary party(树形dp入门)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. [HDU 1317]XYZZY[SPFA变形][最长路]

    题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...

随机推荐

  1. PHP中使用多线程

    <?php while(1)//循环采用3个进程 { //declare(ticks=1); $bWaitFlag= FALSE; // 是否等待进程结束 //$bWaitFlag = TRUE ...

  2. fedora -- java多版本切换

    一般java开发时会下载多个版本的SDK,所以需要多个版本中进行切换 1. 设置JAVA_HOME环境变量需要打开.bashrc文件 2. 安装时使用alternatives将不同版本的java连接到 ...

  3. ios Base64编解码工具类及使用

    为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...

  4. HTML 背景图片自适应

    CSS body.loginpage { background-image: url(../images/background-image.jpg); background-size:cover; } ...

  5. 第一个js面向对象的小实验

    $.extend({             cal: function (num1,num2,oper,aftercal) {                 this.n1 = num1;     ...

  6. schtasks命令遇见ERROR: The request is not supported.

    执行schtasks命令的环境,下文为机器1:windows server 2008 r2 工作任务(Schedules)所在的机器环境,下文为机器2:windows server 2003 当在机器 ...

  7. TCP/IP长连接和短连接

    http://www.cnblogs.com/bigwalnut/articles/2129070.html TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可以很快编出一 ...

  8. 1509 -- Glass Beads POJ

    题意:求一个字符串的最小表示的开始下标 就当模板题写了 把字符串重复一遍,再建后缀自动机,贪心的选最小字典序在上面走len步 因为走出来的一定是子串,长度又是len,所以一定是原来的字符串旋转得到的, ...

  9. 原生js解决跨浏览器兼容问题

    //跨浏览器兼容问题 Util = { //添加类名 add : function(ele,type,hand){ if(ele.addEventListener){ ele.addEventList ...

  10. 【斜率DP】BZOJ 1911:特别行动队

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3006  Solved: 1360[Submit][Statu ...