【vijos1144】小胖守皇宫(树形DP)
2024-10-21 10:11:18
描述
huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫。
皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状;某些宫殿间可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。
可是xuzhenyi手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。
帮助xuzhenyi布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。
格式
输入格式
输入文件中数据表示一棵树,描述如下:
第1行 n,表示树中结点的数目。
第2行至第n+1n+1
行,每行描述每个宫殿结点信息,依次为:该宫殿结点标号i(0<i≤n0<i≤n
),在该宫殿安置侍卫所需的经费k,该点的儿子数m,接下来m个数,分别是这个节点的m个儿子的标号r1,r2,⋯,rmr1,r2,⋯,rm
。
对于一个n(0<n≤15000<n≤1500
)个结点的树,结点标号在1到n之间,且标号不重复。保证经费总和不超过2^31-1
输出格式
输出文件仅包含一个数,为所求的最少的经费。
思路:dp[i,0..2]分别表示在i的某个儿子,i本身,i的父亲安置侍卫覆盖i的整个子树的最小花费
dp[u,0]=dp[v,1]+sigma(min(dp[v',0],dp[v',1])) v<>v'
dp[u,1]=a[u]+sigma(min(dp[v,0],dp[v,1],dp[v,2]))
dp[u,2]=sigma(min(dp[v,0],dp[v,1]))
var dp:array[..,..]of longint;
head,vet,next,a:array[..]of longint;
n,m,i,j,x,y,tot:longint; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure dfs(u,pre:longint);
var e,v,i,s,d:longint;
begin
e:=head[u]; dp[u,]:=maxlongint; dp[u,]:=a[u]; dp[u,]:=;
d:=; s:=;
while e<> do
begin
v:=vet[e];
if v<>pre then
begin
inc(d);
dfs(v,u);
s:=s+min(dp[v,],dp[v,]);
dp[u,]:=dp[u,]+min(min(dp[v,],dp[v,]),dp[v,]);
dp[u,]:=dp[u,]+min(dp[v,],dp[v,]);
end;
e:=next[e];
end;
if d= then begin dp[u,]:=maxlongint; dp[u,]:=a[u]; dp[u,]:=; exit; end;
e:=head[u];
while e<> do
begin
v:=vet[e];
if v<>pre then dp[u,]:=min(dp[u,],s-min(dp[v,],dp[v,])+dp[v,]);
e:=next[e];
end;
end; begin
//assign(input,'vijos1144.in'); reset(input);
// assign(output,'vijos1144.out'); rewrite(output);
readln(n);
for i:= to n do
begin
read(x); read(a[x]);
read(m);
for j:= to m do
begin
read(y); add(x,y); add(y,x);
end;
end;
fillchar(dp,sizeof(dp),$1f);
dfs(,-);
writeln(min(dp[,],dp[,])); //close(input);
//close(output);
end.
最新文章
- iOS - .a静态库的打包(包括打包的文件中用到了一些别人的三方库和分类的处理)
- linux下安装apache与php;Apache+PHP+MySQL配置攻略
- alpha值的问题
- 多个java文件编译并打成jar包经典方法
- 解决问题:centos虚拟机安装好nginx,本机无法访问
- 如何解决grails2.3.2中不能运行fork模式
- 客户视角:Oracle ETL工具ODI
- TensorFlow安装与测试
- Android studio中出现非法字符时的部分解决方法
- HTML全局属性
- Windows Phone开发(47):轻松调用Web Service
- 通过java反射得到javabean的属性名称和值参考
- js判断是否使用的是微信浏览器
- vue拦截器实现统一token,并兼容IE9验证
- 用premake5创建lua532工程
- bzoj 4565 状压区间dp
- github使用个人总结
- 挖掘两个Integer对象的swap的内幕
- Visual Studio 简单使用常识操作
- VB6学习笔记