好迷的树形dp。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxv 500500
#define maxe 1000500
using namespace std;
int n,m,d,x,y,nume=,g[maxv],dp1[maxv][],dp2[maxv][],w[maxv],fath[maxv];
bool mark[maxv][];
struct edge
{
int v,nxt;
}e[maxe];
void addedge(int u,int v)
{
e[++nume].v=v;
e[nume].nxt=g[u];
g[u]=nume;
}
void dp(int x)
{
int flag=;
for (int i=g[x];i;i=e[i].nxt)
{
int v=e[i].v;
if (v!=fath[x])
{
fath[v]=x;
dp(v);flag=;
for (int j=;j<=d;j++)
mark[x][j]|=mark[v][j-];
}
}
if (!flag)
{
if (mark[x][]) dp1[x][]=dp2[x][]=w[x];
for (int i=;i<=d;i++)
{
dp2[x][i]=w[x];
dp1[x][i]=;
}
return;
}
for (int i=;i<=d;i++)
for (int j=g[x];j;j=e[j].nxt)
{
int v=e[j].v;
if (v!=fath[x])
dp1[x][i]+=dp1[v][i-];
}
dp2[x][d]+=w[x];
for (int i=g[x];i;i=e[i].nxt)
{
int v=e[i].v;
if (v!=fath[x])
dp2[x][d]+=dp1[v][d];
}
for (int i=d-;i>=;i--)
{
int ret=;
for (int j=g[x];j;j=e[j].nxt)
{
int v=e[j].v;
if (v!=fath[x])
ret+=dp1[v][i];
}
dp2[x][i]=dp2[x][i+];
for (int j=g[x];j;j=e[j].nxt)
{
int v=e[j].v;
if (v!=fath[x])
dp2[x][i]=min(dp2[x][i],dp2[v][i+]+ret-dp1[v][i]);
}
}
dp1[x][]=dp2[x][];
for (int i=;i<=d;i++)
dp1[x][i]=min(dp1[x][i],dp1[x][i-]);
for (int i=d-;i>=;i--)
if (!mark[x][i]) dp1[x][i]=min(dp1[x][i],dp1[x][i+]);
dp2[x][]=dp1[x][];
}
int main()
{
scanf("%d%d",&n,&d);
for (int i=;i<=n;i++)
scanf("%d",&w[i]);
scanf("%d",&m);
for (int i=;i<=m;i++)
{
scanf("%d",&x);
mark[x][]=true;
}
for (int i=;i<=n-;i++)
{
scanf("%d%d",&x,&y);
addedge(x,y);addedge(y,x);
}
dp();
printf("%d\n",dp1[][]);
return ;
}

BZOJ 4557 侦查守卫的更多相关文章

  1. BZOJ 4557 (JLOI 2016) 侦查守卫

    4557: [JLoi2016]侦察守卫 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 493 Solved: 342 [Submit][Status ...

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

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

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

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

  4. loj #2024. 「JLOI / SHOI2016」侦查守卫

    #2024. 「JLOI / SHOI2016」侦查守卫   题目描述 小 R 和 B 神正在玩一款游戏.这款游戏的地图由 nnn 个点和 n−1n - 1n−1 条无向边组成,每条无向边连接两个点, ...

  5. JLOI2016 侦查守卫

    侦查守卫 小R和B神正在玩一款游戏.这款游戏的地图由 N 个点和 N-1 条无向边组成,每条无向边连接两个点,且地图是连通的.换句话说,游戏的地图是一棵有 N 个节点的树. 游戏中有一种道具叫做侦查守 ...

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

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

  7. bzoj4557侦查守卫

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4557 树形DP.和“河流”有点像,也有一个类似“承诺”的东西. 就是用 f 表示当前节点向下 ...

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

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

  9. bzoj4557【JLOI2016】侦查守卫

    这道题对于我来说并不是特别简单,还可以. 更新一下blog 树形DP f[i][j]表示i的子树中,最高覆盖到i向下第j层的最小花费. g[i][j]表示i的子树全部覆盖,还能向上覆盖j层的最小花费. ...

随机推荐

  1. Python并发与并行的新手指南

    点这里 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程 ...

  2. POJ 1411

    #include<iostream> #include<stdio.h> #include<math.h> #define MAXN 50000 using nam ...

  3. 屏蔽wordpress升级提示

    根据自己的需要,挑选适合的代码放在主题的functions.php文件中就可以了 /* 去除 WordPress 後台升級提示 */ // 2.8 ~ 2.9: add_filter('pre_tra ...

  4. Heroku 与 ASP.NET 5

    一. Heroku 简单来讲,Heroku是一个支持多种语言.极易部署.多价位可免费的 Pass 平台,通过 Buildpack 搭建语言运行环境, 默认内建的大部分是 Web 开发中较为常见的语言, ...

  5. (4)用opengl读入off文件生成可执行文件把模型显示出来(未完待续)

    ·找了好几个程序,好像都达不到我的要求,去教程里看看吧! 在往上抛出了这问题,好几天才有人回答,我已经找到程序了 正好的他的分析对我分解程序很有用 这是一个难度比较高的 首先你要分析.off文件结构, ...

  6. iOS App 唤醒另一个App

    网上也有讲这块的,感觉讲得都不是很好.而且有一些细节根本没有讲清楚.这里重写整理一下相关知识点. 主要内容 URL Scheme 是什么? 项目中关键的配置 注意事项 URL Scheme 是什么? ...

  7. 通过表达式、函数给React组件属性赋值

    一.需求 当有传属性name的值时,则显示Hello "name",否则显示Hello World 二.4种方式的代码实现 1.通过三元运算符 <!DOCTYPE html& ...

  8. Struts2笔记——Action校验器

    在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验.  对于输入校验struts2提供了两种实现方法: 1.采用手工编写代码实现. 2.基于XML配置 ...

  9. iOS & Mac 调试命令(VMMap&Top)

    vmmap & top命令解析内存 Is there any way to query the address space of a process on Mac? On Windows, w ...

  10. ActiveMQ简单介绍以及安装

    概述 首先简单的介绍一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送. ActiveMQ是Apache所提供 ...