loj

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 ;
}

随机推荐

  1. javax.websocket.Session的一个close异常记录

    一刷新页面就报错如下: Connection closed 四月 10, 2018 11:20:18 上午 org.apache.tomcat.websocket.pojo.PojoEndpointB ...

  2. @atcoder - Japanese Student Championship 2019 Qualification - E@ Card Collector

    目录 @description@ @solution@ @accepted code@ @details@ @description@ N 个卡片放在 H*W 的方格图上,第 i 张卡片的权值为 Ai ...

  3. 运行项目npm run dev时报错: ~Error: Cannot find module 'webpack-cli/bin/config-yargs', 原因是

    webpack@3.X运行项目npm run dev时报错: ~Error: Cannot find module 'webpack-cli/bin/config-yargs' 我的原因是:  web ...

  4. iptables端口映射

    见上节透明代理设置 #iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT -- ...

  5. git的安装与命令行基本的使用

    1.https://git-scm.com/ 点击这个网址进入git的官方网站 2,.进去里面会有提示,64位于32位的,根据自己的电脑安装 3 下载完了过后就直接安装,一般会安装在c盘里面 ,进入安 ...

  6. Python--day47--mysql索引注意事项

  7. poj1573

    题意:给出一个矩形,N,E,S,W分别代表进行移动的方向,如果走出矩形网格则输出经过的网格数,如果在矩形网格内循环,则输出没进入循环之前所走过的网格数和循环所经过的网格数: 思路:创建两个数组,一个字 ...

  8. tf.contrib.layers.xavier_initializer

    https://blog.csdn.net/yinruiyang94/article/details/78354257xavier_initializer( uniform=True, seed=No ...

  9. SpringData Jpa、Hibernate、Jpa 三者之间的关系

    JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架--因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服 ...

  10. python编程之进程

    进程:运行中的程序 进程和操作系统的关系:进程是操作系统调度和资源分配的最小单位,是操作系统的结构基础. 那么为什么要有进程呢? 程序在运行时,会使用各种硬件资源,如果他们之间没有界限,那么程序之间的 ...