$Loj10157$ 皇宫看守 树形$DP$
Description
有一些宫殿,它们呈树形结构,相邻的宫殿之间可以互相望见.在一些宫殿设立士兵,使得所有的宫殿都有士兵或是被士兵望见.求最小士兵数.
Sol
状态:
f[x][0] 表示结点i被父结点覆盖,以i为根的树需要的最小士兵数
f[x][1] 表示结点i被自己覆盖,以i为根的树需要的最小士兵数
f[x][2] 表示结点i被子结点覆盖,以i为根的树需要的最小士兵数
转移:(y是x的子结点)
f[x][0]=Σmin(f[y][1],f[y][2])
f[x][1]=Σmin(f[y][1],f[y][2],f[y][3])
f[x][2]=Σmin(f[y][1],f[y][2])+d,d=min(f[y][1]-min(f[y][1],f[y][2]))
就f[x][2]的转移稍微难想一点点,可以这样理解:
先算f[x][2]=Σmin(f[y][1],f[y][2]),但是这样并不能保证一定在某个y上设立了士兵
如果要保证这一点,那么就可能产生附加的代价,就是f[y][1]-min(f[y][1],f[y][2]),加上最小代价即可
Code
#include<iostream>
#include<cstdio>
#include<vector>
#define Rg register
#define il inline
#define inf 2100000000
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=;
int n,rt,f[N][],a[N];
vector<int> c[N];
bool d[N];
il void dp(int x)
{
f[x][]=a[x];
int hhh=c[x].size()-,t=inf;
if(hhh<)return;
f[x][]=;
go(i,,hhh)
{
int y=c[x][i];dp(y);
f[x][]+=min(f[y][],f[y][]);
f[x][]+=min(f[y][],min(f[y][],f[y][]));
t=min(t,f[y][]-min(f[y][],f[y][]));
}
f[x][]=f[x][]+t;
}
int main()
{
n=read();
go(i,,n)
{
int t=read(),m,x;
a[t]=read();m=read();
while(m--){x=read();c[t].push_back(x);d[x]=;}
}
go(i,,n)f[i][]=inf;
go(i,,n)if(!d[i]){rt=i;break;}
dp(rt);
printf("%d\n",min(f[rt][],f[rt][]));
return ;
}
随机推荐
- js+canvas制作前端验证码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- HTML打印print
上代码: //打印 function printme() { global_Html = document.body.innerHTML; //document.body.innerHTML = do ...
- Android Joda-time工具类
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. Joda- ...
- 深度学习的Xavier初始化方法
在tensorflow中,有一个初始化函数:tf.contrib.layers.variance_scaling_initializer.Tensorflow 官网的介绍为: variance_sca ...
- poj 1689 && zoj 1422 3002 Rubbery (Geometry + BFS)
ZOJ :: Problems :: Show Problem 1689 -- 3002 Rubbery 这题是从校内oj的几何分类里面找到的. 题意不难,就是给出一个区域(L,W),这个区域里面有很 ...
- H3C 路由协议与可路由协议
- word 筛选过的网页,网页,单个文件网页
1)筛选过的网页:保存后会生成 xxx.htm和xxx.files文件夹,删除了还原成Word文档所需的格式标记和功能,也就是说存为纯网页了,文件尺寸小:2)网页:保存后会生成 xxx.htm和xxx ...
- python进阶之面向对象初识
面向对象 不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题. 通过下面的例子来初步了解面向对象的编程方式. class Person: # ...
- java 面试题之交通灯管理系统
需求: 交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ...
- QuartusII 13.0的完美破解
网络上破解QuartusII 13.0软件的方法都不行,最后经过本人总结测试(独创),最终实现了QuartusII 13.0的破解,破解方法如下: 网上常规操作之后,会得到一个“license.dat ...