$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 ;
}
随机推荐
- 薪资管理系统(Java面向对象思想)
package com.test3; import java.util.*; import java.io.*; /** * @author qingfeng * 重要思想:面向对象思想(添加员工管理 ...
- [USACO07JAN]区间统计Tallest Cow
前缀和 sum[i]表示前i个数的和 每次读入a[i]的时候 sum[i] = sum[i - 1] + a[i]; 查询l ~ r区间的和: sum[r] - sum[l - 1] 差分 即前缀和的 ...
- Spring IoC 使用详解
在Spring中,依赖注入(DI)模式实现了控制反转(IoC)原理.让我们通过一个例子来帮助理解依赖注入.我们先看到java版的例子,然后在此基础上加上spring的功能.就例子而言,是相当地简单.Q ...
- Data Flow-File Read-详细过程
- IP应用加速技术详解:如何提升动静混合站点的访问速率?
全站加速(DCDN)-IPA是阿里云自主研发四层加速产品,它基于TCP/UDP的私有协议提供加速服务,包括解决跨运营商网络不稳定.单线源站.突发流量.网络拥塞等诸多因素导致的延迟高.服务不稳定的问题, ...
- 1878: [SDOI2009]HH的项 莫队算法-离线查询区间内部不同数字的个数
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...
- vue1——vue引入方法,npm本地安装
博客地址 :https://www.cnblogs.com/sandraryan/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.Vue 只关注视图层, 采用 ...
- 排他网关(ExclusiveGateWay)
网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA.具体需求是这样的:当部门申请的金额小于一万块的时候, ...
- HTML--表格与表单
一.表格 <table></table>表格 width:宽度.可以用像素或百分比表示. 常用960像素. border:边框,常用值为0. cellpadding:内容跟边框 ...
- springmvc url处理映射的三种方式:
一.SpringMVC简介 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,并管理应用所需对象 ...