poj 1463 Strategic game(树形dp,最小边覆盖集)
来源:互联网 发布:蓝牙耳机辅助软件 编辑:程序博客网 时间:2024/04/30 04:33
Time Limit: 2000MS Memory Limit: 10000KTotal Submissions: 7501 Accepted: 3489
Description
Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now he has the following problem. He must defend a medieval city, the roads of which form a tree. He has to put the minimum number of soldiers on the nodes so that they can observe all the edges. Can you help him?
Your program should find the minimum number of soldiers that Bob has to put for a given tree.
For example for the tree:
the solution is one soldier ( at the node 1).
Your program should find the minimum number of soldiers that Bob has to put for a given tree.
For example for the tree:
the solution is one soldier ( at the node 1).
Input
The input contains several data sets in text format. Each data set represents a tree with the following description:
The node identifiers are integer numbers between 0 and n-1, for n nodes (0 < n <= 1500);the number_of_roads in each line of input will no more than 10. Every edge appears only once in the input data.
- the number of nodes
- the description of each node in the following format
node_identifier:(number_of_roads) node_identifier1 node_identifier2 ... node_identifiernumber_of_roads
or
node_identifier:(0)
The node identifiers are integer numbers between 0 and n-1, for n nodes (0 < n <= 1500);the number_of_roads in each line of input will no more than 10. Every edge appears only once in the input data.
Output
The output should be printed on the standard output. For each given input data set, print one integer number in a single line that gives the result (the minimum number of soldiers). An example is given in the following:
Sample Input
40:(1) 11:(2) 2 32:(0)3:(0)53:(3) 1 4 21:(1) 02:(0)0:(0)4:(0)
Sample Output
12
Source
Southeastern Europe 2000
题目大意:
有一个树形村庄,节点与道路相连,问在节点上最少放多少个士兵可以使得所有边被士兵观察到,每个士兵能看到与节点邻接的边。
解题思路:
dp[i][j]表示第i个点是否放置士兵的使得子树边全部被观察到的最小士兵数。dp[i][0]=sigema(dp[j][1]);dp[i][1]=sigema(min(dp[j][0],dp[j][1]),所求的就是min(dp[1][0],dp[1][1]).
#include<stdio.h>#include<map>#include<string>#include<cstring>#include<algorithm>#include<vector>#include<iostream>#define maxn 1550#define c(a) memset(a,0,sizeof(a))#define c_1(a) memset(a,-1,sizeof(a))using namespace std;vector<int>cl[maxn];int dp[maxn][2];bool v[maxn];int dfs(int i, int j){if (dp[i][j] != -1)return dp[i][j];int ans = 0;if (j == 1){ans++;for (int k = 0; k < cl[i].size(); k++){int a = dfs(cl[i][k], 0);int b = dfs(cl[i][k], 1);ans += min(a, b);}return dp[i][j] = ans;}else{for (int k = 0; k < cl[i].size(); k++){ans += dfs(cl[i][k], 1);}return dp[i][j] = ans;}}int main(){int n;while (scanf("%d", &n)==1){c_1(dp); c(v);int a,b,s;for (int i = 0; i<n; i++)cl[i].clear();for (int i = 0; i < n; i++){scanf("%d:(%d)",&s ,&a);for (int j = 0; j < a; j++){scanf("%d", &b);cl[s].push_back(b);v[b] = 1;}}for (int i = 0; i < n; i++)if (cl[i].size() == 0) { dp[i][0] = 0; dp[i][1] = 1; }int x=0;for (int i = 0; i < n; i++)if (!v[i]) x = x+min(dfs(i, 1), dfs(i, 0)); printf("%d\n",x);}}
0 0
- poj 1463 Strategic game(最小点覆盖树形DP)
- poj 1463 Strategic game(树形dp,最小边覆盖集)
- POJ 1463 Strategic game 最小点覆盖集(树形dp)
- POJ 1463 Strategic game 最小点覆盖,树形DP
- POJ 1463 Strategic game (二分图最小覆盖点(匈牙利算法) 或 树形DP)
- POJ 1463 Strategic game (树形DP,放置点覆盖边)
- poj 1463 Strategic game 树型dp,最小点集覆盖
- hdu1054 Strategic Game(最小覆盖点-树形dp)
- POJ 1463 Strategic game(树形DP-树上的点集覆盖模型)
- POJ 1463 Strategic game (树形dp 树的最小点覆盖 水)
- poj 1463 Strategic game (树形DP)
- Uva 1292 - Strategic game 树形dp 最小点覆盖
- 树形DP专辑--POJ 1463 Strategic game
- poj 1463 Strategic game(树形DP)
- POJ 1463 Strategic game( 树形DP )
- POJ 1463-Strategic game(树形DP)
- POJ - 1463Strategic game入门树形DP
- poj 1463 Strategic game 树形dp
- 关于MyEclipse2015无法导入servlet源码包的解决方法
- MetaWear传感器学习之路(一)
- 用邻接表表示图【java实现】
- LeetCode #14 Longest Common Prefix 最长公共前缀 解题小节
- hibernate的面试总结.
- poj 1463 Strategic game(树形dp,最小边覆盖集)
- 清华EMBA课程系列思考之七 -- 财务会计控制
- 几个JAVA常见面试题
- 关于try catch finally一点研究
- 从矩阵左上角至右下角(无权值)问题
- hashtable和hashmap的区别
- codeforces-148E-Porcelain【DP】
- POJ 3687 Labeling Balls 拓扑排序
- mysql的prepared statement