标签:
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 35 Accepted Submission(s): 8
Stack expansion program: #pragma comment(linker, “/STACK:1024000000,1024000000″)
——————————————————————
题意:
给定n个点的树 和树上的m条路径以及路径的价值
选择一些路径使得选的路径没有公共点,求最大的价值和。
思路:
显然就是2个dp方程,每个点有两个状态,选或不选。
考虑u和u的儿子们v1,v2,v3···
设dp[u][0]是不选,显然dp[u][0] = sigma(dp[v]);
若有一条路径{u,v1,z1,z2}
则选择这条路径时:dp[u][1] =(dp[u][0]-dp[v1][1])-(dp[v1][0]-dp[z1][1])+(dp[z1][0]-dp[z2][1])+dp[z2][0];
将公式移项可得:dp[u][1] = \
dp[u][0]-(dp[v1][0]-dp[v1][1])+(dp[z1][0]-dp[z1][1])+(dp[z2][0]-dp[z2][1]);
所以我们需要维护链上的dp[v][0]和dp[v][1]的权值和,用lct维护一下这两个值。
剩下就是在树形dp一边跑,一边计算dp的值了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 5293 TREE CHAIN PROBLEM LCT+树形DP
标签:
原文地址:http://blog.csdn.net/qq574857122/article/details/47001629