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. PAT T1003 Universal Travel Sites

    网络流模板~ #include<bits/stdc++.h> using namespace std; ; const int inf=1e9; queue<int> q; i ...

  2. Vue——解决报错 Computed property "****" was assigned to but it has no setter.

    在最近的项目中遇到了如下的警告信息: [Vue warn]: Computed property " currentStep" was assigned to but it has ...

  3. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  4. java 实现图片上传功能

    1:jsp 页面上传图片按钮在这里我就写相关的代码 <div class="control-group"> <label class="control- ...

  5. Java中使用JSONTokener判断接口返回字符串是JSONObject还是JSONArray

    今天在接口对接中,遇到一个问题,对方接口返回的JSONString,类型不确定,所以需要先做判断再进行处理.查阅资料后使用JSONTokener可进行处理,特此记录. String ret = ord ...

  6. Java解析json数组三种情况

    package com.example.demo.json; import java.util.Map; import com.alibaba.fastjson.JSON; import com.al ...

  7. Write-up-Bob_v1.0.1

    关于 下载地址:点我 哔哩哔哩视频:哔哩哔哩 信息收集 网卡:vmnet8:IP在192.168.131.1/24 ➜ ~ ip a show dev vmnet8 5: vmnet8: <BR ...

  8. FTP的vsftpd.conf含义

    # 设置为YES时vsftpd以独立运行方式启动,设置为NO时以xinetd方式启动 #(xinetd是管理守护进程的,将服务集中管理,可以减少大量服务的资源消耗) listen=YES # 同上,如 ...

  9. postman提交文件

    说明 1.Headers中添加 Content-Type      multipart/form-data 2.Body 中选择form-data 并添加 需要传的参数名和值 最后新的一行选择file ...

  10. Melodic 使用URDF创建简单的机器人模型

    本人Linux版本:Ubuntu 18.04LTS ROS版本:Melodic URDF代码 <?xml version="1.0" ?> <robot name ...