题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4557

见这位的博客:https://www.cnblogs.com/Narh/p/9140326.html

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int const maxn=,inf=1e9;
ll w[maxn],f[maxn][],g[maxn][];
int n,d,m,head[maxn],ct;//f向下 g向上
bool mark[maxn];
struct N{
int to,next;
N(int t=,int n=):to(t),next(n) {}
}edge[maxn<<];
void dp(int x,int fa)
{
if(mark[x])f[x][]=w[x],g[x][]=w[x];
else f[x][]=,g[x][]=;
for(int i=;i<=d;i++)g[x][i]=w[x];
g[x][d+]=inf;
for(int i=head[x];i;i=edge[i].next)
{
int v=edge[i].to;
if(v==fa)continue;
dp(v,x);
for(int i=;i<=d;i++)g[x][i]=min(g[x][i]+f[v][i],g[v][i+]+f[x][i+]);
for(int i=d;i;i--)g[x][i-]=min(g[x][i],g[x][i-]);//倒序需要
f[x][]=g[x][];
for(int i=;i<=d;i++)f[x][i]+=f[v][i-];
for(int i=;i<=d;i++)f[x][i]=min(f[x][i],f[x][i-]);
}
}
int main()
{
scanf("%d%d",&n,&d);
for(int i=;i<=n;i++)scanf("%lld",&w[i]);
scanf("%d",&m);
for(int i=,x;i<=m;i++)
{
scanf("%d",&x);
mark[x]=;
}
for(int i=,x,y;i<n;i++)
{
scanf("%d%d",&x,&y);
edge[++ct]=N(y,head[x]);head[x]=ct;
edge[++ct]=N(x,head[y]);head[y]=ct;
}
dp(,);
printf("%lld",f[][]);
return ;
}

bzoj4557 [JLoi2016]侦察守卫——DP的更多相关文章

  1. BZOJ4557 JLoi2016 侦察守卫 【树形DP】*

    BZOJ4557 JLoi2016 侦察守卫 Description 小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点,且地图是连通的.换句话说,游戏的地图是 ...

  2. [BZOJ4557][JLOI2016]侦察守卫(树形DP)

    首先可以确定是树形DP,但这里存在跨子树的信息传递问题,这里就需要“借”的思想. f[i][j]表示i子树内所有点都被覆盖到,且i以外j层内的点都能被覆盖到 的方案数. g[i][j]表示i子树内离i ...

  3. BZOJ4557 JLOI2016侦察守卫(树形dp)

    下称放置守卫的点为监控点.设f[i][j]为i子树中深度最大的未被监视点与i的距离不超过j时的最小代价,g[i][j]为i子树中距离i最近的监控点与i的距离不超过j且i子树内点全部被监视时的最小代价. ...

  4. bzoj千题计划272:bzoj4557: [JLoi2016]侦察守卫

    http://www.lydsy.com/JudgeOnline/problem.php?id=4557 假设当前到了x的子树,现在是合并 x的第k个子树 f[x][j] 表示x的前k-1个子树该覆盖 ...

  5. 【BZOJ4557】[JLoi2016]侦察守卫 树形DP

    [BZOJ4557][JLoi2016]侦察守卫 Description 小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点,且地图是连通的.换句话说,游戏的地 ...

  6. [BZOJ4557][JLOI2016]侦查守卫

    4557: [JLoi2016]侦察守卫 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 297  Solved: 200[Submit][Status ...

  7. bzoj 4557: [JLoi2016]侦察守卫 树归

    bzoj 4557: [JLoi2016]侦察守卫 设f[x][j]表示覆盖以x为根的子树的所有应该被覆盖的节点,并且以x为根的子树向下j层全部被覆盖的最小代价. 设g[x][j]表示与x距离大于j全 ...

  8. 4557: [JLoi2016]侦察守卫

    4557: [JLoi2016]侦察守卫 链接 分析: 因为D比较小,所设状态f[i][j]表示子树i内,从i往下第j层及第j层以下都覆盖了的最小代价,g[i][j]表示覆盖完子树内所有点,还可以往上 ...

  9. bzoj 4557: [JLoi2016]侦察守卫【树形dp】

    设f[u][i]为u点向下覆盖至少i层并且处理完u的子树的最小代价,f[u][i]为u点向上覆盖至少i层并且处理完u的子树的最小代价 转移的话显然f[u][i]+=f[v][i-1],但是f[u][0 ...

随机推荐

  1. C51单片机头文件和启动文件

    STARTUP.A51//启动文件. 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数 <reg51.h>  //特殊寄存器的字节地址和位地址,sfr定义字 ...

  2. Java日志框架-Spring中使用Logback(Spring/Spring MVC)

    继上一篇文章http://www.cnblogs.com/EasonJim/p/7800880.html中所集成的是基于Java的普通项目,如果要在Spring和Spring MVC上集成,需要做如下 ...

  3. ios 使用keychain来存储token

    注意事项: 1.>On iPhone, Keychain rights depend on the provisioning profile used to sign your applicat ...

  4. es删除文档或者删除索引

    es删除文档或者删除索引 学习了:https://www.imooc.com/video/15771 删除文档: DELETE http://127.0.0.1:9200/people/man/1 删 ...

  5. python web框架企业实战具体解释(第六期)\第三课时-ajax&amp;jquery&amp;webpy

    main.py __author__ = 'Liao' import web import time urls = ( '/gettime','gettime', '/(.*)', 'hello' ) ...

  6. background-size使用参考指南

    语法:background-size :[ <length> | <percentage> | auto ]{1,2} | cover | contain相关属性: backg ...

  7. centos或者ubuntu设置ssh免密码登陆

    1. 输入  # ssh-keygen -t rsa -P ""  然后一路回车 2.输入  # cat ~/.ssh/id_rsa.pub >> ~/.ssh/aut ...

  8. Yii Criteria常用方法(select,join,where,日期,)

    $criteria = new CDbCriteria;  //select $criteria->select = '*';//默认* $criteria->select = 'id,n ...

  9. Metasploit学习笔记之——情报搜集

    1.情报搜集 1.1外围信息搜索 1.1.1通过DNS和IP地址挖掘目标网络信息 (1)whois域名注冊信息查询(BT5.kali专有):root@kali:~# whois testfire.ne ...

  10. 使用ucontext组件实现的coroutine代码分析

    coroutine一般翻译过来就是协程,类似于线程可以切换,而跟线程是由操作系统调度器来实现切换不一样,协程由用户程序自己调度进行切换.我以前也看过协程相关的内容,但没有自己去实现过.最近搞OpenS ...