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. V9自定义分页函数

    大家做网站的时候,可能很多时候分页样式都得根据模板的要求来控制的,这时很多人都会去修改全局文件phpcms\libs\functions \global.func.php里的pages()函数,这样问 ...

  2. python中执行javascript代码

    python中执行javascript代码: 1.安装相应的库,我使用的是PyV8 2.import PyV8 ctxt = PyV8.JSContext()     ctxt.enter()     ...

  3. C语言控制语句总结(if else for switch while break continue)

    一.if语句 1表达式 if(条件表达式) 语句 注: (1)条件表达式,一般为逻辑表达式或关系表达式,但也可以是任何数值类型,如整型.实型.字符型.指针型数据等. (2)语句,由于是C语言的语句,而 ...

  4. xaml中绑定单例属性

    在项目中经常会遇到,同一个字典表绑定到多个ItemsControl上的情况,可以在单例中创建一个List,xaml上绑定即可.看代码: 1,XAML <Grid> <StackPan ...

  5. 通过telnet命令进行网络邮件发送

    1.建立smtp邮箱服务连接 open smtp.sina.com 2.连接上邮箱服务后进行握手操作 helo smtp.sina.com 3.输入帐号密码进行验证::此步后缓冲区会输出一些字符,你只 ...

  6. go语言实现的目录共享程序

    其实程序很小,只不过是想写点东西了.后天晚上要回学校考试了,转眼已经出来了69天了,2个月多一点.工资加上老妈赞助的钱,不知道能不能买台电脑,作为程序员一直用着i3-3217u实在难受.回去找同学拷点 ...

  7. vim中编写python代码使用python-mode和syntastic插件时警告(Warning)的消除

    问题: 在Vim使用了syntastic后,编写代码时,可以对代码错误和警告进行相对实时的了解,对编写代码有很大的帮助.同时这个插件和python-mode一起工作时,可以对python代码的编写提供 ...

  8. Controlling Site Provisioning Process with a Custom Provider

    http://www.cnblogs.com/frankzye/archive/2010/09/07/1820346.html http://sujoysharepoint2010.blogspot. ...

  9. DB天气app冲刺第九天

    今天已经是冲刺的第九天了.应该算是进入了冲刺的后半期了.今天的android界面UI设计基本完成了.但还是有一些的bug,自己怎么也调不好,明天需要请教一下大神去. 今天已经把昨天布置的任务完成了.昨 ...

  10. Ext4.2 grid 条件查询使用

    项目中用到Ext4.2,初次接触,用的不是太熟,做个总结,恳请指正! 1.grid重新设置条件,查询结果不是从第1页开始 在处理grid条件查询时,点击搜索按钮调用store.load()方法时,会把 ...