Strategic Game

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4114    Accepted Submission(s): 1824

Problem 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.
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:
 
Sample Input
4
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)
 
Sample Output
1
2
 
Source
 
 
第一道树形DP,感觉就是考察树的遍历,DP还是比较简单的
 
#include<stdio.h>
#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的更多相关文章

  1. HDU1054 Strategic Game —— 最小点覆盖 or 树形DP

    题目链接:https://vjudge.net/problem/HDU-1054 Strategic Game Time Limit: 20000/10000 MS (Java/Others)     ...

  2. HDU1054 Strategic Game——匈牙利算法

    Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...

  3. hdu---(1054)Strategic Game(最小覆盖边)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. Hdu1054 Strategic Game(最小覆盖点集)

    Strategic Game Problem Description Bob enjoys playing computer games, especially strategic games, bu ...

  5. HDU1054 Strategic Game(最小点覆盖)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. hdu1054 Strategic Game 树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:树形DP,用二分匹配也能解决 定义dp[root][1],表示以root 为根结点的子树且 ...

  7. hdu1054 树形dp&&二分图

    B - Strategic Game Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  8. DDD:Strategic Domain Driven Design with Context Mapping

    Introduction Many approaches to object oriented modeling tend not to scale well when the application ...

  9. poj 1463 Strategic game DP

    题目地址:http://poj.org/problem?id=1463 题目: Strategic game Time Limit: 2000MS   Memory Limit: 10000K Tot ...

  10. UVA 1292 十二 Strategic game

    Strategic game Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Sta ...

随机推荐

  1. selenium 参数设置-window.navigator.webdriver

    selenium 参数设置 selenium启动chrome基本上与真实环境类似,但有一些变量还是不一样,需要注意. 有些网站通过这些参数识别爬虫. window.navigator.webdrive ...

  2. notepad++常用命令

    1>shift+tab减少缩进 2>tab键增加缩进 3>ctrol+d键复制多行 4>shift+alt+方向箭头,选中列 5>alt+c插入序列 6>ctrl+ ...

  3. MySQL之约束

    目录 约束(CONSTRAINT) mysql中的约束有哪些? 级联操作 产生的原因: 两种级联的定义方式 约束(CONSTRAINT) 什么是约束? ​ 是一种限制,对某一个东西的限制.例如宪法规定 ...

  4. Elasticsearch 如何使用RESTful API

    所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch .事实上,正如你所看到的 ...

  5. Spark教程——(9)Oozie编排Spark任务

    进入Hue管理界面,打开Oozie Editor: 将打包好的Spark程序上传到HDFS上,拖拽Spark任务,编辑任务属性,选择打包好的Spark程序,设置主函数所在类,设置选项参数: 保存为任务 ...

  6. 使用 TestFight 构建 Beta 测试版本

    ---恢复内容开始--- Beta测试属于软件开发周期中的一环,测试的重点就是让一些活生生的人去使用你的App,不断测试然后反馈.你需要让你的测试成员发现尽可能多的bug,以便你在公开发布之前将其修复 ...

  7. Centos7 使用yum安装MariaDB与MariaDB的简单配置与使用

    一.mariadb的安装 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜 ...

  8. 由Nginx反向代理引出的JCaptcha验证码验证失败的问题

    搜索关键字: 1)Windows本地开发正常,部署到Linux远程服务器上JCaptcha验证失败 2)Linux远程服务器上JCpatcha验证失败 3)Nginx反向代理后JCaptcha验证失败 ...

  9. linux查漏补缺-linux命令行安装mysql

    apt安装 sudo apt-get update sudo apt-get install mysql-server root@192:/sys/fs/cgroup# apt-get install ...

  10. mabatisplus-update

    /** * <p> * 根据 whereEntity 条件,更新记录 * </p> * * @param entity 实体对象 (set 条件值,不能为 null) * @p ...