Strategic game
来源:互联网 发布:如何建立网络平台 编辑:程序博客网 时间:2024/06/06 07:08
Strategic game
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 2000ms
- 内存限制:
- 65536kB
- 描述
- 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). - 输入
- The input contains several data sets in text format. Each data set represents a tree with the following description:
- 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. - the number of nodes
- 输出
- 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:
- 样例输入
40:(1) 11:(2) 2 32:(0)3:(0)53:(3) 1 4 21:(1) 02:(0)0:(0)4:(0)
- 样例输出
12
- 来源
- Southeastern Europe 2000
- 求最小边覆盖,动规
#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#include<iomanip>#include<queue>#include<stack>#include<vector>#include<set>#include<map>using namespace std;int dp[1505][2];vector<int>V[1505];int root;int solve(int x){dp[x][0]=0;dp[x][1]=1;for(int i=0;i<V[x].size();++i){int son=V[x][i];solve(son);dp[x][0]+=dp[son][1];dp[x][1]+=min(dp[son][0],dp[son][1]);}return min(dp[x][0],dp[x][1]);}int main(){int n,a,b,x;while(scanf("%d",&n)!=EOF){memset(dp,0,sizeof(dp));for(int i=0;i<=n;++i)V[i].clear(); root=-1;for(int i=0;i<n;++i){scanf("%d:(%d)",&a,&b);if(root==-1){root=a;}for(int j=0;j<b;++j){scanf("%d",&x);V[a].push_back(x);}}printf("%d\n",solve(root));}}
阅读全文
0 0
- Strategic game
- Strategic game
- Strategic game
- Strategic Game
- Strategic game
- poj1463 Strategic game
- hdoj 1054 Strategic Game
- hdu 1054 Strategic Game
- HDU 1054 Strategic Game
- hdu 1054 Strategic Game
- hdu 1054 Strategic Game
- hdu_1054-Strategic Game
- Strategic Game LA 2038
- UvaLive-2083-Strategic game
- POJ-1463-Strategic game
- Hdu 1054 Strategic Game
- Strategic Game HDU
- UVALive 2038 Strategic game
- 神奇的口袋
- 例题6-8 树(Tree, UVa 548)
- ZOJ 1081 Points Within(点在多边形内判定)
- ccf认证高速公路90
- SSH框架的搭建
- Strategic game
- opencv 鼠标截取图像
- 树的遍历(递归与非递归版本)
- 梯度与导数的关系
- (1)大学第一节C++课
- POJ1163 The Triangle
- 面向对象实现各种数据结构
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛J题Our Journey of Dalian Ends (最小费用最大流)
- PAT乙级1061. 判断题(15)