HDU1054-Strategic Game
Strategic Game
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4114 Accepted Submission(s): 1824
Your program should find the minimum number of soldiers that Bob has to put for a given tree.
The input file 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_identifier or node_identifier:(0)
The node identifiers are integer numbers between 0 and n-1, for n nodes (0 < n <= 1500). Every edge appears only once in the input data.
For example for the tree:
the solution is one soldier ( at the node 1).
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 table:
0:(1) 1
1:(2) 2 3
2:(0)
3:(0)
5
3:(3) 1 4 2
1:(1) 0
2:(0)
0:(0)
4:(0)
2
#include<vector>
#include<cstring>
#define N 1505
using namespace std;
int dp[N][2],visit[N];
vector<int> V[N];
int min(int a,int b)
{
return a>b?b:a;
}
void dfs(int k)
{
int i;
for(i=0;i<V[k].size();i++)
{
if(visit[V[k][i]] == 0) //判断是否为子节点
{
visit[ V[k][i] ] = 1;
dfs(V[k][i]);
visit[ V[k][i] ] = 0;
}
}
int s1=0,s2=0;
for(i=0;i<V[k].size();i++)
{
if(visit[V[k][i]] == 0) //判断是否为子节点
{
s1 += min(dp[ V[k][i] ][0] , dp[V[k][i]][1]);
s2 += dp[ V[k][i] ][1];
}
}
dp[k][1] = s1+1;
dp[k][0] = s2;
}
int main()
{
int n,i,j,t;
char a[20];
while(scanf("%d",&n)!=EOF)
{
memset(visit,0,sizeof(visit));
visit[1]=1;
for(i=0;i<n;i++)
V[i].clear();
for(i=0;i<n;i++)
{
scanf("%s",a);
int len=strlen(a);
int cc=0,tt=0;
j=0;
while(a[j]!='(')
{
if(a[j]>='0' && a[j]<='9')
cc=cc*10+a[j]-'0';
j++;
}
while(a[j]!=')')
{
if(a[j]>='0' && a[j]<='9')
tt=tt*10+a[j]-'0';
j++;
}
for(j=0;j<tt;j++)
{
scanf("%d",&t);
V[cc].push_back(t);
V[t].push_back(cc);
}
}
memset(dp,0,sizeof(dp));
dfs(1);
printf("%d\n",min(dp[1][0] , dp[1][1]));
}
return 0;
}
HDU1054-Strategic Game的更多相关文章
- HDU1054 Strategic Game —— 最小点覆盖 or 树形DP
题目链接:https://vjudge.net/problem/HDU-1054 Strategic Game Time Limit: 20000/10000 MS (Java/Others) ...
- HDU1054 Strategic Game——匈牙利算法
Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...
- hdu---(1054)Strategic Game(最小覆盖边)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Hdu1054 Strategic Game(最小覆盖点集)
Strategic Game Problem Description Bob enjoys playing computer games, especially strategic games, bu ...
- HDU1054 Strategic Game(最小点覆盖)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu1054 Strategic Game 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:树形DP,用二分匹配也能解决 定义dp[root][1],表示以root 为根结点的子树且 ...
- hdu1054 树形dp&&二分图
B - Strategic Game Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- DDD:Strategic Domain Driven Design with Context Mapping
Introduction Many approaches to object oriented modeling tend not to scale well when the application ...
- poj 1463 Strategic game DP
题目地址:http://poj.org/problem?id=1463 题目: Strategic game Time Limit: 2000MS Memory Limit: 10000K Tot ...
- UVA 1292 十二 Strategic game
Strategic game Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
随机推荐
- Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter
1.DateTimeFormatter final修饰,线程安全,用于打印和解析日期-时间对象的格式化程序. 创建DateTimeFormatter: DateTimeFormatter dateTi ...
- selenium+chrome options
selenium+chrome options 环境:selenium chrome 1. selenium + chrome参数配置 1.1. 启动 from selenium im ...
- Send key模块发送按键
filename:send_key.py 1 # Author:Bing # Date:07/19/2017 import SendKeys import win32gui import pywin ...
- android 简单列表对话框(AlertDialog.Builder().setItems())
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...
- c语言中“#if 0 / #if 1 ... #endif”的作用
原帖地址:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=2028608&bbs_page_no=1005&bbs_id=9999 1. ...
- C++中的可调用对象
在C++中,常常会利用函数来简化程序流程.函数的存在使得C++整体更加“模块化”,因而也使得代码可读性大大提高. 在C++程序中,常常会很灵活地调用函数来实现不同的功能与目的(函数重载.继承多态等等) ...
- PHP开发者该知道的5个Composer小技巧
Composer 是新一代的PHP依赖管理工具.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单 co ...
- <每日一课学习笔记> "mysql为什么加了索引还是慢查询"
long_query_time mysql判断慢查询的依据是,sql执行时间与系统参数 long_query_time 作比较,如果大于这个参数,就会将这条sql计入慢查询语句中.long_query ...
- 谁说5G网络无敌?第六代Wi-Fi表示不服
导读 随着第五代移动通信技术(5G)正式商用,同属第五代的Wi-Fi技术(802.11ac)的处境就非常尴尬了,除了不存流量费用外,无论是网速.设备连接数还是网络延迟,5G都拥有秒杀802.11ac的 ...
- node属性
认识node的方法 1.dom.nodeChildrens 用于获取dom下的子元素节点 2.dom.nodeType 用于获取dom节点的属性.共有12种属性,实用属性3种. 元素节点=>1 ...