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. 一键绑定-提供一键动态绑定键盘输入的效果[C#制作](2020年寒假小目标07)

    日期:2020.01.31 博客期:139 星期五 [需求部分] 嗯,其实我是找了一下网站,要实现按下一个键盘键可以按照顺序输出想要的多个键盘键,差不多就是这样的功能.为什么我会有想实现这样功能的想法 ...

  2. 阿里云Centos7安装mysql5.7

    下载mysql安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 安装mysql yum -y ...

  3. WebService-CXF 学习笔记

    什么是CXF Apache CXF = Celtix + Xfire支持多种协议:SOAP1.1,1.2XML/HTTPCORBA(Common Object Request Broker Archi ...

  4. 常见Linux发行版有哪些?

    Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...

  5. 34 java 文件过滤 FileFilter

    package com.da.tool.util; import org.apache.commons.io.filefilter.RegexFileFilter; import java.io.Fi ...

  6. 理解JS中的回调(Callback)函数

    今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...

  7. ImageSwitcher和GridView的案例开发

    (一)ImageSwitcher之手机相册的滑动查看 首先在布局文件上加一个ImageSwitcher,设置它的宽度和高度为match_parent. 在主程序中:首先设置一个存储照片资源的数组,在设 ...

  8. Django 学习之用户认证组件auth与User对象

    一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个. 1 .authenticate() ...

  9. 《java核心技术:卷1》PDF版 和 Word版下载

    链接:https://pan.baidu.com/s/1OcpdZ4wfeo55xeJQQBHXRg 提取码:hds0

  10. 2020年digitalocean最新优惠码100美元奖励

    欧美免备案vps服务器digitalocean我用了四年,创建一台vps速度非常快. 由于中国用户扎堆购买Vultr和Linode线路,导致digitalocean中国用户少,反而更稳定.digita ...