2013 长沙Regional I题:LIKE vs CANDLE (树dp)
2013-11-24 22:12
337 查看
下面用0表示LIKE,1表示CANDLE。
设状态fw[u]表示以节点u为根的子树的 0-1 的最大值,用rv[u]表示以节点u为根的子树的 1-0 的最大值。则:
fw[u] = max(rv[u]-cost,sigma(fw[v]))
rv[u] = max(fw[u]-cost,sigma(rv[v]))
v 为u的子节点。而每个节点只考虑翻或者不翻,因此花费分别为X或Y。
cost虽然是花0的power,但是上面的两个转移都是 ‘-’ 号,这里我解释一下。
答案求的是0-1的最大值,而由于有翻转操作,因此最优解也可以从1-0的最大值来考虑,那么就是说,rv[u] 是 fw[u] 的替补项。而翻转操作,就是交换0和1,那么现在fw[u]中的0,就是原来rv[u]中的1,而cost要减在fw[u]中的[0]上,因此也就是要减在rv[u]的1上。从fw[u]-cost 转移到rv[u]同理。
设状态fw[u]表示以节点u为根的子树的 0-1 的最大值,用rv[u]表示以节点u为根的子树的 1-0 的最大值。则:
fw[u] = max(rv[u]-cost,sigma(fw[v]))
rv[u] = max(fw[u]-cost,sigma(rv[v]))
v 为u的子节点。而每个节点只考虑翻或者不翻,因此花费分别为X或Y。
cost虽然是花0的power,但是上面的两个转移都是 ‘-’ 号,这里我解释一下。
答案求的是0-1的最大值,而由于有翻转操作,因此最优解也可以从1-0的最大值来考虑,那么就是说,rv[u] 是 fw[u] 的替补项。而翻转操作,就是交换0和1,那么现在fw[u]中的0,就是原来rv[u]中的1,而cost要减在fw[u]中的[0]上,因此也就是要减在rv[u]的1上。从fw[u]-cost 转移到rv[u]同理。
/* Created Time: Sunday, November 24, 2013 PM09:27:20 CST */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 55555; int n,cx,cy; int fw ,rv ; // 分别保存0,1最大的选项 struct edge { int v,next; }g[N<<1]; int head ,etot,w ,rev ,bel ; void add_edge(int u,int v) { g[etot].v = v; g[etot].next = head[u]; head[u] = etot ++; } void dfs(int u,int fa) { fw[u] = rv[u] = 0; if (bel[u]==0) { fw[u] += w[u]; rv[u] -= w[u]; } else { fw[u] -= w[u]; rv[u] += w[u]; } for (int i = head[u]; i != -1; i = g[i].next) { int v = g[i].v; if (v==fa) continue; dfs(v,u); fw[u] += fw[v]; rv[u] += rv[v]; } int cost = cx; if (rev[u]) { cost = cy; swap(fw[u],rv[u]); } if (u) { if (rv[u]-cost>fw[u]) fw[u] = rv[u]-cost; if (fw[u]-cost>rv[u]) rv[u] = fw[u]-cost; } } int main() { while (~scanf("%d%d%d",&n,&cx,&cy)) { memset(head,-1,sizeof(head)); etot = 0; for (int i = 1; i <= n; i ++) { int d; scanf("%d%d%d%d",&w[i],&d,&rev[i],&bel[i]); add_edge(d,i); } dfs(0,-1); if (fw[0]<0) puts("HAHAHAOMG"); else printf("%d\n",fw[0]); } return 0; }
相关文章推荐
- HDU 4799 LIKE vs CANDLE ACM/ICPC 2013 Changsha(树形dp)
- HDU 4799 LIKE vs CANDLE 树形dp
- hdu 4799 LIKE vs CANDLE(树形dp)
- zoj-3734 LIKE vs CANDLE 【树形dp】
- 树形DP(2)-Hdu 4799 LIKE vs CANDLE
- HDU4799 LIKE vs CANDLE(树形dp)
- HDU 4799 LIKE vs CANDLE 树形dp
- HDU 4799 LIKE vs CANDLE 【树形dp】【阅读题】【水题】
- ZOJ 3734 LIKE vs CANDLE _树形DP
- [HDOJ 4799][BNUOJ 34021] LIKE vs CANDLE [树形DP]
- HDU 4571 Travel in time(最短路径+DP)(2013 ACM-ICPC长沙赛区全国邀请赛)
- zoj-3734-LIKE vs CANDLE
- BZOJ3163&Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]
- HDU 4815 Little Tiger vs. Deep Monkey (DP)2013 长春现场赛
- hdu 4799 LIKE vs CANDLE
- ZOJ 3734: LIKE vs CANDLE
- [CODEVS1090][NOIP2013]加分二叉树(树形dp)
- 2013 长沙邀请赛 HDU 4571 Travel in time(dp)
- ZOJ3734 LIKE vs CANDLE
- zoj 3734 LIKE vs CANDLE