POJ1463->树形DP
来源:互联网 发布:考上清华 知乎 编辑:程序博客网 时间:2024/06/10 18:18
//树形DP//树的最小点覆盖//f[x][1]以x为根的子树在x上放置的士兵的最少所需的士兵数目//f[x][0]以x为根的子树x上不放置的士兵的最少所需的士兵数目//状态转移方程://如果当前节点选取,则其子节点可选可不选dp[root][1] += min(dp[tree[root][i]][1],dp[tree[root][i]][0]) ;//如果当前节点不选,则其子节点必须选 dp[root][0] += dp[tree[root][i]][1] ;#include <stdio.h>#include <iostream>#include <vector>#include <string.h>using namespace std ;#define MAX 1510vector<int>tree[MAX] ;int f[MAX] , n , dp[MAX][2];void DFS(int root){ dp[root][0]=0; dp[root][1]=1; int len = tree[root].size(); for(int i = 0 ; i < len ; i ++) { DFS(tree[root][i]) ; } for(int i = 0 ; i < len ; i ++) { dp[root][1] += min(dp[tree[root][i]][1],dp[tree[root][i]][0]) ; dp[root][0] += dp[tree[root][i]][1] ; }}int main(){ int edge , fa , son ; while(scanf("%d",&n)!=EOF) { memset(f , -1 , sizeof(f)) ; for(int i = 1 ; i <= n ; i ++) { scanf("%d:(%d)", &fa , &edge); //dp[i][0] = 0 ; //dp[i][1] = 1 ; tree[fa].clear(); while(edge --) { scanf("%d",&son) ; tree[fa].push_back(son) ; f[son] = fa ; } } int a = 1 ; while(f[a]!= -1) a=f[a]; DFS(a); printf("%d\n" , min(dp[a][0],dp[a][1])) ; } return 0 ;}
0 0
- poj1463 树形dp
- 树形dp poj1463
- POJ1463 简单树形DP
- poj1463 树形dp
- poj1463树形dp
- poj1463(树形DP)
- POJ1463->树形DP
- poj1463——树形DP
- POJ1463 Strategic game(树形DP)
- POJ1463 Strategic game(树形DP)
- poj1463 Strategic game 树形dp
- ZOJ1134 POJ1463 HDU1054 Strategic Game, 树形DP
- HDU1054 && POJ1463:Strategic game(树形DP)
- poj1463 Strategic game(树形dp)
- poj1463--hdu1054--Strategic Game(树形DP练习4)
- #POJ1463#Strategic Game(贪心 or Hungary or 树形DP)
- 【贪心】【树形DP】[POJ1463][HDU1054]Strategic game 战略游戏
- poj1463树形动归
- JavaEE学习笔记之Servlet/JSP(6)
- 简述servlet生命周期
- 浅谈HTML5中的Canvas基本绘图API简易封装和使用(一)
- Linux下的ip命令
- 6、视图的操作----第2篇
- POJ1463->树形DP
- urllib2自定义opener详解
- sql代码重构——使用自定义函数(一)
- Android 对canvas的translate()方法的理解
- 双向链表
- Android软键盘弹出时把布局顶上去,控件乱套解决方法
- html初学1
- 写出servlet重要的对象有哪些?
- 排序复杂度分析