loj10157
太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫。
皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状,某些宫殿间可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。
可是陆小凤手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。
帮助陆小凤布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。

输入格式
输入中数据描述一棵树,描述如下:
第一行 n,表示树中结点的数目。
第二行至第 n+1行,每行描述每个宫殿结点信息,依次为:该宫殿结点标号 i(0<i≤n),在该宫殿安置侍卫所需的经费 k,该边的儿子数 m,接下来 m 个数,分别是这个节点的 m 个儿子的标号r1,r2,⋯,rm。
对于一个 n 个结点的树,结点标号在 1 到 n 之间,且标号不重复。
输出格式
输出最少的经费
数据范围与提示
对于 100% 的数据,0<n≤1500。
______________________________________________________________________________________________________________________
f[u][0]:u点由父节点看守
f[u][1]:u点由子节点看守
f[u][2]:u点由自己看守
f[u][0]=sum(min(f[v][1],f[v][2]))
f[u][2]=sum(min(f[v][0],f[v][1],f[v][2]))+fy[u]
f[u][1]=sum(min(f[v][1],f[v][2]))+min(f[v][2]-min(f[v][1],f[v][2]))
注意f[u][1]的推导
______________________________________________________________________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1510;
4 int n,root;
5 int fy[maxn],rd[maxn];
6 struct edge
7 {
8 int u,v,nxt;
9 }e[maxn];
10 int head[maxn],js;
11 void addage(int u,int v)
12 {
13 e[++js].u=u;e[js].v=v;
14 e[js].nxt=head[u];head[u]=js;
15 }
16 int f[maxn][3];
17 int minn(int a,int b,int c)
18 {
19 int tp=a;
20 if(tp>b)tp=b;
21 if(tp>c)tp=c;
22 return tp;
23 }
24 void dp(int u,int fa)
25 {
26 f[u][0]=f[u][1]=0;
27 f[u][2]=fy[u];
28 int tp=0x7fffffff;
29 for(int i=head[u];i;i=e[i].nxt)
30 {
31 int v=e[i].v;
32 dp(v,u);
33 f[u][0]+=min(f[v][1],f[v][2]);
34 f[u][2]+=minn(f[v][0],f[v][1],f[v][2]);
35 f[u][1]+=min(f[v][1],f[v][2]);
36 tp=min(tp,f[v][2]-min(f[v][1],f[v][2]));
37 }
38 f[u][1]+=tp;
39 }
40 int main()
41 {
42 scanf("%d",&n);
43 for(int u,nm,v,i=1;i<=n;++i)
44 {
45 scanf("%d",&u);
46 scanf("%d%d",&fy[u],&nm);
47 for(int j=0;j<nm;++j)
48 {
49 scanf("%d",&v);
50 rd[v]++;
51 addage(u,v);
52 }
53 }
54 for(int i=1;i<=n;++i)
55 {
56 if(rd[i]==0)
57 {
58 root=i;
59 break;
60 }
61 }
62 dp(root,0);
63 cout<<min(f[root][1],f[root][2]);
64 return 0;
65 }
loj10157的更多相关文章
- 【题解】保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006]
[题解]保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006] 传送门:皇宫看守\([LOJ10157]\) 保安站岗 \([P2458]\) \([SDOI2006]\) [题目描述 ...
- LOJ10157——皇宫看守(树形DP)
传送门:QAQQAQ 题意:在一个树上放置守卫,使每一个节点都至少有相邻一节点放置守卫,使最终经费最少 思路:树形DP 首先会想到没有上司的舞会,0表示不放守卫,1表示放守卫,但考虑到对于当前点不放守 ...
- $Loj10157$ 皇宫看守 树形$DP$
loj Description 有一些宫殿,它们呈树形结构,相邻的宫殿之间可以互相望见.在一些宫殿设立士兵,使得所有的宫殿都有士兵或是被士兵望见.求最小士兵数. Sol 状态: f[x][0] 表示结 ...
随机推荐
- Android猜数字大小游戏
功能介绍:该程序能够提示猜大了猜小了,并且对空白输入处理,还对猜测次数限制,提供重置功能. 1.先看界面,一个输入框EditText,两个Button 2.界面设计 activity_main2.x ...
- Fragment学习
利用Fragment可以动态的加载页面,减少Activity的数量. 便于开发 类似与html中FragmentSet一样 嵌套在一起,使每个页面为独立的 代码如下: package com.exam ...
- http协议中的缓存机制
强缓存 - expires,服务器给客户端一个过期日期,如(2020-12-12),过了该时间,客户端请求服务器重新获取.存在问题:客户端与服务端存在时间差,会导致过期时间不准确 - Cache-co ...
- Node项目模板管理脚手架ptm-cli开发
目录 一.ptm-cli 使用说明 1.特点 2.安装 3.使用 1)基础帮助命令 2)添加模板/项目 3)编辑模板/项目 4)查看模板/项目 5)删除模板/项目 6)基于模板新建/初始化项目 二 p ...
- 数据库的查询(结合YGGL.sql)
(如有错误,欢迎指正!) 1.select 语句查询 (1)查询employees表员工部门号和性别,要求消除重复行. mysql> select distinct 员工部门号,性别 from ...
- vue的路由以后的页面整合
前面呢也提到一点点,今天就吧这个页面整合给分享一下.有不对的地方还望包容. 在vue中,一般在主显示的界面的路径呢一般是'/'也就是单括号中有一斜杠的这个呢是默认的显示路径.只要路由配置了这个路径用& ...
- Study_way
一.Study 学习通Java基础视频.语法 开源中国 (Git)版本控制 读懂程序.源代码 相关资源 百度网盘 程序:方法(数学) 二.参数传递 基本数据的传参:虚参改变影响实参 引用数据的传参:数 ...
- 一文详解 ARP 协议
我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 公众号连载计算机网络文章如下 ARP,这个隐匿在计网 ...
- oracle 11.2.0.1.0 升级 11.2.0.4.0 并 patch 到11.2.0.4.7
升级步骤: (1) 备份数据库 (2) 运行patchset,升级oracle 软件 (3) 准备新的ORACLE_HOME (4) 运行dbua 或者脚本升级实例 (5) ...
- 最全的HashMap源码解析!
HashMap源码解析 HashMap采用键值对形式的存储结构,每个key对应唯一的value,查询和修改的速度很快,能到到O(1)的平均复杂度.他是非线程安全的,且不能保证元素的存储顺序. 他的关系 ...