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

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

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

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

输入格式

输入中数据描述一棵树,描述如下:

第一行 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的更多相关文章

  1. 【题解】保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006]

    [题解]保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006] 传送门:皇宫看守\([LOJ10157]\) 保安站岗 \([P2458]\) \([SDOI2006]\) [题目描述 ...

  2. LOJ10157——皇宫看守(树形DP)

    传送门:QAQQAQ 题意:在一个树上放置守卫,使每一个节点都至少有相邻一节点放置守卫,使最终经费最少 思路:树形DP 首先会想到没有上司的舞会,0表示不放守卫,1表示放守卫,但考虑到对于当前点不放守 ...

  3. $Loj10157$ 皇宫看守 树形$DP$

    loj Description 有一些宫殿,它们呈树形结构,相邻的宫殿之间可以互相望见.在一些宫殿设立士兵,使得所有的宫殿都有士兵或是被士兵望见.求最小士兵数. Sol 状态: f[x][0] 表示结 ...

随机推荐

  1. Linux USB子系统(一)—— USB设备基础概念

    一.基础概念 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的.一个USB设备由3个功能模块组成:USB总线接口 ...

  2. 主从同步遇到 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'时怎么解决

    首先遇到这个是因为binlog位置索引处的问题,不要reset slave: reset slave会将主从同步的文件以及位置恢复到初始状态,一开始没有数据还好,有数据的话,相当于重新开始同步,可能会 ...

  3. UDP 通讯方式

    1.创建套接字:2.绑定端口:3.收发数据: 收到的数据中包含发送方的端口信息4.关闭套接字:

  4. Java8的Optional:如何干掉空指针?

    目录 Optional概述 Optional简单案例 Optional的主要方法 参考阅读 Optional概述 Optional 是个容器:它可以保存类型T的value,或者仅仅保存null.Opt ...

  5. OpenWRT19.07_命令行_重拨wan_重启路由

    OpenWRT19.07_命令行_重拨wan_重启路由 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-19. 写OpenWRT的脚本时,需要用到一些重启命令 以下的命令中的参 ...

  6. 【原创】Linux PCI驱动框架分析(三)

    背 景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本 ...

  7. PHP 判断手机端还是web端

    function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) re ...

  8. go mod 拉取私有仓库

    前言 如果代码中依赖了本地的包, 这个包是托管在内网 Gitlab 中, 而且不是 HTTPS 服务,那么应该怎样使用 go mod 拉取代码呢? 本文会给你我的答案 正文 首先我们要知道, 如果本地 ...

  9. Go语言从入门到放弃(结构体常见的tag)

    什么是tag Tag是结构体中某个字段别名, 可以定义多个, 空格分隔 type Student struct {     Name string `ak:"av" bk:&quo ...

  10. 分装button组件引发的内存泄漏问题

    这个问题其实一开始在vue里写的时候并没有注意到这一点,也没有报错,直到在react里写的时候给我报了一堆错之后,经各种磨烂之后最终找到是分装button组件的问题,既然找到问题在哪就好办了 直接先上 ...