题目描述

问题描述:

  太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫。

  皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状;某些宫殿间可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。

  可是陆小凤手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。

编程任务:帮助陆小凤布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。

输入输出格式

输入格式:

数据输入:输入数据由文件名为INPUT.TXT的文本文件提供。输入文件中数据表示一棵树,描述如下:

  第1行 n,表示树中结点的数目。

  第2行至第n+1行,每行描述每个宫殿结点信息,依次为:该宫殿结点标号i(0<i<=n),在该宫殿安置侍卫所需的经费k,该边的儿子数m,接下来m个数,分别是这个节点的m个儿子的标号r1,r2,...,rm。

  对于一个n(0 < n <= 1500)个结点的树,结点标号在1到n之间,且标号不重复。

输出格式:

数据输出:输出到OUTPUT.TXT文件中。输出文件仅包含一个数,为所求的最少的经费。

解题思路:

这是一道树形dp题,递归枚举每个结点,j1为i的子节点,三种情况:

1.d[i][0]表示i结点由父节点来看守,d[i][0] += min(d[j1][1], d[j1][2]);

2.d[i][1]表示由子节点来看守,d[i][1]=min(d[i][1],不由父节点看守的子节点和-最小不由父节点看守子节点的值);

3.d[i][2]表示由自己看守,d[i][2]+=min(min(d[j1][0],d[j1][1]),d[j1][2])

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,son,a[2000][2000],d[2000][3],id,i,j,v[2000],rood,w[2000];
void dp(int r)
{int k,sum=0,j1;d[r][2]=w[r];for(k=a[r][0];k>=1;k--){j1=a[r][k];dp(j1);d[r][0] += min(d[j1][1], d[j1][2]);d[r][2]+=min(min(d[j1][0],d[j1][1]),d[j1][2]);sum+=min(d[j1][1],d[j1][2]);}d[r][1]=0x3f3f3f3f;for(k=a[r][0];k>=1;k--){j1=a[r][k];d[r][1]=min(d[r][1],sum-min(d[j1][1],d[j1][2])+d[j1][2]); }
}
int main()
{cin>>n;memset(v,1,sizeof(v));for(i=1;i<=n;i++){scanf("%d",&id);scanf("%d%d",&w[id],&m);a[id][0]=m;for(j=1;j<=m;j++) {scanf("%d",&a[id][j]);v[a[id][j]]=0;}}for(i=1;i<=n;i++)if(v[i]){rood=i;break;}dp(rood);cout<<min(d[rood][1],d[rood][2]);return 0;
}

皇宫看守【SGOI-2】相关推荐

  1. AcWing 1077. 皇宫看守(树形DP + 状态机DP)

    AcWing 1077. 皇宫看守(树形DP + 状态机DP) 一.问题 二.分析 1.思路分析 2.状态表示 3.状态转移 4.循环设计 5.初末状态 三.代码 一.问题 二.分析 1.思路分析 在 ...

  2. Acwing 1077.皇宫看守

    Acwing 1077.皇宫看守 题目 输入格式 输出格式 数据范围 输入样例 输出样例 样例解释 分析 详细代码 这是我第一篇博客,如有侵权或者不足的地方,我将予以修改,并改正 题目 太平王世子事件 ...

  3. Acwing 1077. 皇宫看守

    参考题目:Acwing 1077. 皇宫看守 题意 给定一个树,求覆盖所有点的最少花费. 算法:树形DP 时间复杂度: O ( n ) O(n) O(n) (每个点只被搜索一次) f 数组含义: f[ ...

  4. AcWing1077. 皇宫看守(树形DP)题解

    题目传送门 题目描述 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状,某些宫殿间可以互相望见. 大内保卫森严,三步一岗,五步一哨,每个宫殿 ...

  5. CIA1 皇宫看守(树形dp)

    问题描述:太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候 ...

  6. 皇宫看守(guard)

    [问题描述] 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:有边直接相连的宫殿可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都 ...

  7. TYWZOJ[1580]皇宫看守

    题目描述 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状,某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候 ...

  8. 1077. 皇宫看守

    太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫各个宫殿的分布,呈一棵树的形状,宫殿可视为树中结点,两个宫殿之间如果存在道路直接相连,则该道路视为树中的一条边. 已知,在一个宫殿镇守的守卫不 ...

  9. AcWing 1077. 皇宫看守(详解)

    题目描述 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫.皇宫各个宫殿的分布,呈一棵树的形状,宫殿可视为树中结点,两个宫殿之间如果存在道路直接相连,则该道路视为树中的一条边.已知,在一个宫殿镇守的 ...

最新文章

  1. Windows10下安装配置 perl 环境
  2. 查询出某个表依赖于某个表的外键,进行遍历删除操作
  3. matlab 注意事项
  4. asp.net 利用多表联合查询进行汇总统计
  5. Windows下载Android源代码
  6. 山东省能源产业项目动态及未来投资决策建议报告2021版
  7. gettype拿不到值_被玩家强行改位置的5个英雄,他上单无解,杀吕布灭铠爹,这都拿去辅助?...
  8. java小票_Java编程打印购物小票实现代码
  9. java中的关键事件是_java – 自定义关键事件
  10. python递归的方式打印九九乘法表
  11. 关于DoIP 协议的理解
  12. 使用NVivo完善定性编码的艺术
  13. 求两个数的最大公约数和最小公倍数
  14. python爬取豆瓣书评排行榜_爬虫:爬取豆瓣读书排行榜
  15. 中级微观经济学笔记整理
  16. EXFAT文件系统DBR的完美恢复
  17. 【Jon】连接Mysql数据库出现1046错误
  18. 对国内基金行业的一些思考 【投资干货】
  19. 一键查询自己名下所有微信账户
  20. kettle carte repository 资源库 useSSL=false warning 警告

热门文章

  1. C4D快速入门教程——C4D贴图
  2. missing separator. Stop
  3. LaTeX如何正确输入引号:双引号“”单引号‘’
  4. TP-LINK路由端口映射图文教程 【路由器建主】
  5. springboot之sts使用
  6. java冒泡排序详解!!!带图
  7. 茧数SCRM产品介绍系列:智能名片
  8. C语言:删除线性链表中数据域为 item 的所有结点
  9. android AudioTrack
  10. 对JSON数据进行排序