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. CSS常用函数calc等

    >>CSS常用函数<<

  2. 2018-10-15-Winforms-可能遇到的-1000-个问题

    title author date CreateTime categories Winforms 可能遇到的 1000 个问题 lindexi 2018-10-15 09:35:15 +0800 20 ...

  3. oracle中=>是什么意思呢?

    => 是 Oracle 中调用 存储过程的时候, 指定 参数名进行调用.一般是, 某些参数有默认值的时候,你需要跳过某些参数来进行调用.下面是具体的例子. 参数的默认值SQL> CREAT ...

  4. NLP突破性成果 BERT 模型详细解读 bert参数微调

    https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 ​关注她 82 人赞了该文章 Goo ...

  5. ubuntu14.04本地域名服务器配置

    dnsmasq 1 修改dnsmasq配置文件/etc/dnsmasq.conf # Change this line if you want dns to get its upstream serv ...

  6. jQuery 文档操作 - remove() 方法

    移除所有 <p> 元素: 定义和用法 remove() 方法移除被选元素,包括所有文本和子节点. 该方法不会把匹配的元素从 jQuery 对象中删除,因而可以在将来再使用这些匹配的元素. ...

  7. Python--day68--ORM内容回顾

    Django项目如何使用ORM连接MySQL: 多对多关系讲解:

  8. Study in JI During the Summer Vacation

    15/07/2019-21/07/2019 Task List: 1.uow homework including vocabulary and listening 2.ASL's dictation ...

  9. 4-10 items设计

    1,items相当于dict,但是又比字典好 2,parse.urljoin(response.url,post_url)方法,其中image_url是一个域名的话,其中的当前域名就不用再添加. yi ...

  10. codeforce 378 div 2 F —— Drivers Dissatisfaction (最小生成树,LCA,倍增)

    官方题解: If you choose any n - 1 roads then price of reducing overall dissatisfaction is equal to min(c ...