设f[u][i]为u点向下覆盖至少i层并且处理完u的子树的最小代价,f[u][i]为u点向上覆盖至少i层并且处理完u的子树的最小代价

转移的话显然f[u][i]+=f[v][i-1],但是f[u][0]不好确定,可以知道f[u][0]=g[u][0],而g的转移是g[u][j]=min(g[u][j]+f[e[i].to][j],f[u][j+1]+g[e[i].to][j+1]),所以就可以求了

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int N=500005;
  5. int n,d,m,a[N],h[N],cnt,f[N][25],g[N][25];
  6. bool v[N];
  7. struct qwe
  8. {
  9. int ne,to;
  10. }e[N<<1];
  11. int read()
  12. {
  13. int r=0,f=1;
  14. char p=getchar();
  15. while(p>'9'||p<'0')
  16. {
  17. if(p=='-')
  18. f=-1;
  19. p=getchar();
  20. }
  21. while(p>='0'&&p<='9')
  22. {
  23. r=r*10+p-48;
  24. p=getchar();
  25. }
  26. return r*f;
  27. }
  28. void add(int u,int v)
  29. {
  30. cnt++;
  31. e[cnt].ne=h[u];
  32. e[cnt].to=v;
  33. h[u]=cnt;
  34. }
  35. void dfs(int u,int fa)
  36. {
  37. f[u][0]=g[u][0]=v[u]?a[u]:0;
  38. for(int i=1;i<=d;i++)
  39. g[u][i]=a[u];
  40. g[u][d+1]=1e9;
  41. for(int i=h[u];i;i=e[i].ne)
  42. if(e[i].to!=fa)
  43. {
  44. dfs(e[i].to,u);
  45. for(int j=0;j<=d;j++)
  46. g[u][j]=min(g[u][j]+f[e[i].to][j],f[u][j+1]+g[e[i].to][j+1]);
  47. for(int j=d;j>=0;j--)
  48. g[u][j]=min(g[u][j],g[u][j+1]);
  49. f[u][0]=g[u][0];
  50. for(int j=1;j<=d;j++)
  51. f[u][j]+=f[e[i].to][j-1];
  52. for(int j=1;j<=d;j++)
  53. f[u][j]=min(f[u][j],f[u][j-1]);
  54. }
  55. }
  56. int main()
  57. {
  58. n=read(),d=read();//cerr<<n<<" "<<d<<endl;
  59. for(int i=1;i<=n;i++)
  60. a[i]=read();
  61. m=read();
  62. for(int i=1;i<=m;i++)
  63. v[read()]=1;
  64. for(int i=1;i<n;i++)
  65. {
  66. int x=read(),y=read();
  67. add(x,y),add(y,x);
  68. }
  69. dfs(1,0);
  70. printf("%d\n",f[1][0]);
  71. return 0;
  72. }

bzoj 4557: [JLoi2016]侦察守卫【树形dp】的更多相关文章

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

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

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

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

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

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

  4. BZOJ 4557: [JLoi2016]侦察守卫

    题目大意:每个点有一个放置守卫的代价,同时每个点放置守卫能覆盖到的距离都为d,问覆盖所有给定点的代价是多少. 题解: 树形DP f[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上覆盖y层的最 ...

  5. 4557: [JLoi2016]侦察守卫

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

  6. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  7. BZOJ 4557 JLOI2016 侦查守卫 树形dp

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4557 题意概述: 给出一棵树,每个点付出代价w[i]可以控制距离和它不超过d的点,现在给 ...

  8. 洛谷 P3267 [JLOI2016/SHOI2016]侦察守卫(树形dp)

    题面 luogu 题解 树形\(dp\) \(f[x][y]表示x的y层以下的所有点都已经覆盖完,还需要覆盖上面的y层的最小代价.\) \(g[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上 ...

  9. BZOJ 4726: [POI2017]Sabota? 树形dp

    4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...

随机推荐

  1. innodb 修改表共享空间为独立空间

    最近在优化mysql innodb存储引擎,准备把共享表空间转换成独立表空间.刚开始的没考虑这么多,过段时间又要推广,所以优化一下,看看效果如何.说一个转换过程. 1,查看一下是共享表空间,还是独立表 ...

  2. python实现QQ机器人(自己主动登录,获取群消息,发送群消息)

    一次偶然的机会我看见了一个群里的一个QQ号总是依据你所发的消息自己主动回复,当时非常感觉到奇妙.我知道能够模拟登录站点,没想到居然也能模拟登录QQ,首先自己想到的就是怎样实现模拟登录PC端的QQ, 開 ...

  3. iOS多线程编程指南

    iOS多线程编程指南(拓展篇)(1) 一.Cocoa 在Cocoa上面使用多线程的指南包括以下这些: (1)不可改变的对象一般是线程安全的.一旦你创建了它们,你可以把这些对象在线程间安全的传递.另一方 ...

  4. nginx-伤心的事

    今天测试接口,总是出问题,测试了两天,整个流程就卡在最后一步. 每次采用curl,request等请求访问我的服务器都会返回403状态码,网上找了很多资料 有权限的,有静态文件的,然而很多都没有什么卵 ...

  5. Linux MySQL主从复制(Replication)配置

    MySQL是开源的关系型数据库系统.复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程. 配置主服务器(mast ...

  6. TiDB 整体架构 结合yarn zookeeper分析架构

    TiDB 简介与整体架构| PingCAP https://www.pingcap.com/docs-cn/overview/ 真正金融级高可用 相比于传统主从 (M-S) 复制方案,基于 Raft ...

  7. elastica安装

    https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-targz.html

  8. django-sso单点登陆的实现

    环境准备 环境规格: python3.5 django2.0 django-simple-sso-0.14 环境安装: pip install django-simple-sso-0.14 环境说明: ...

  9. gnss到底是什么呢

    GNSS Global Navigation Satellite System 全球卫星导航系统:提到这个很多人会不明白GNSS倒是是个啥东西呢,和北斗,GPS, GLONASS,Galileo系统有 ...

  10. 以太坊EVM1.0缺陷

    256位的虚拟机 目前主流的CPU是32位或64位,在这些机器上进行256位运算需要将256位分段成多个64位指令执行,执行效率比32/64位低,在存储上方面,保存一个数需要256位的存储空间,绝大多 ...