JLOI/SHOI2016侦查守卫


SOL:

\(f[i][j]i\)点向上\(j\)层都可以被监视最小代价(当前点为第0层)

\(g[i][j]i\)点向下\(j\)层都无法别监视最小代价(当前点为第1层)

初始值:

需守卫的点:\(f[x][0]=g[x][0]=w[x]\)

其余点:\(f[x][0]=g[x][0]=0\)

所有点:\(f[x][i]=w[x](i>0)\)

转移方程:

\[f[x][i]=min(f[x][i]+min(g[v][i],f[v][i+1]),g[x][i+1]+f[v][i+1])\]

\[f[x][i]=min(f[x][i],f[x][i+1])\]

\[g[x][0]=f[x][0]\]

\[g[x][i]+=g[v][i-1]\]

\[g[x][i]=min(g[x][i],g[x][i-1])\]

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int x=0,f=1;char c=getchar();
    while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
    while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    return f==1?x:-x;
}
const int N=5e5+4,D=24;
int n,m,d,a[N],f[N][D],g[N][D],w[N];
vector<int>e[N];
void dfs(int x,int fa){
    if(a[x])f[x][0]=g[x][0]=w[x];
    else f[x][0]=g[x][0]=0;
    for(int i=1;i<=d;i++)f[x][i]=w[x];
    for(auto v:e[x]){
        if(v==fa)continue;
        dfs(v,x);
        for(int i=d;i>=0;i--){
            f[x][i]=min(min(f[x][i]+g[v][i],g[x][i+1]+f[v][i+1]),f[x][i]+f[v][i+1]);
            f[x][i]=min(f[x][i+1],f[x][i]);
        }
        g[x][0]=f[x][0];
        for(int i=1;i<=d+1;i++){
            g[x][i]=g[x][i]+g[v][i-1];
            g[x][i]=min(g[x][i],g[x][i-1]);
        }
    }
}
int main(){
    n=read();d=read();
    for(int i=1;i<=n;i++)w[i]=read();
    m=read();
    for(int i=1;i<=m;i++)a[read()]=1;
    for(int i=1,u,v;i<n;i++){
        u=read();v=read();
        e[u].push_back(v);e[v].push_back(u);
    }
    memset(f,0x3f,sizeof(f));
    dfs(1,0);
    cout<<f[1][0];
    return (0-0);
}

原文地址:https://www.cnblogs.com/aurora2004/p/12535683.html

时间: 2025-01-01 11:43:59

JLOI/SHOI2016侦查守卫的相关文章

bzoj4557【JZOI2016】侦查守卫

4557: [JLoi2016]侦察守卫 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 114  Solved: 70 [Submit][Status][Discuss] Description 小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点,且地图是连通的 .换句话说,游戏的地图是一棵有N个节点的树.游戏中有一种道具叫做侦查守卫,当一名玩家在一个点上放置侦 查守卫后,它可以监视这个点以及与这个点的距

「JLOI / SHOI2016」侦查守卫

树上的动态规划 对于一棵子树内的守卫,也可以覆盖子树外的节点,需要加一维来记录子树与外界的关系. g[u][j] 表示覆盖完子树并且还可以覆盖离子树根节点距离不大于j的点的最小花费 f[u][j] 表示子树内只保证距离子树根节点距离不小于j的节点被覆盖的最小花费 讨论树的子树对于树的关系来转移: u是v的父亲,则 g[u][j]=min(g[u][j]+f[v][j],g[v][j+1]+f[u][j+1]) f[u][j] = Σf[v][j-1] g[u][j] = min(g[u][j],

[JLOI2016/SHOI2016]侦察守卫(树形dp)

小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点,且地图是连通的.换句话说,游戏的地图是一棵有N个节点的树. 游戏中有一种道具叫做侦查守卫,当一名玩家在一个点上放置侦查守卫后,它可以监视这个点以及与这个点的距离在D以内的所有点.这里两个点之间的距离定义为它们在树上的距离,也就是两个点之间唯一的简单路径上所经过边的条数.在一个点上放置侦查守卫需要付出一定的代价,在不同点放置守卫的代价可能不同. 现在小R知道了所有B神可能会出现的位置,请你计算监视所有这些位

优云软件应邀参加“视频侦查与视频监控深度应用研修班”并作主题演讲

为推进全国公安机关视频监控系统联网建设,加强视频侦查技术深度应用,由公安部第一研究所<警察技术>杂志社主办的"全国公安机关视频监控建设与实战应用专题研修班"于2017年5月9日-12日在贵阳举行,研修班邀请了400余位来自全国各地各级公安机关负责视频监控建设及视频侦查工作的领导及业务骨干,学员们一起探讨视频监控相关产品及最新技术应用. 研修班会场 优云软件作为双态运维先行者.企业级运维专家,应邀参加本次研修班.会上向来自全国公安机关的一线专家介绍了优云在平安城市视频监控运维

BZOJ 4596: [Shoi2016]黑暗前的幻想乡

4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 408  Solved: 232[Submit][Status][Discuss] Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解

[bzoj4883][Lydsy2017年5月月赛]棋盘上的守卫

来自FallDream的博客,未经允许,请勿转载, 谢谢. 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个守卫,一个守卫 不能同时兼顾行列的防御.请计算控制整个棋盘的最小代价. n*m<=10^5 费用流比较好想,把行和列拿出来,第i行向第j列连费用是a[i][j]的边,然后限制每行每列流量1即可. 但是费用流不是很科学(好像有人大力艹过了?),考虑优

【TYVJ1864】[Poetize I]守卫者的挑战 概率与期望

[TYVJ1864][Poetize I]守卫者的挑战 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图--"瞬间,队员们被传送到了一个擂台上,最初身边有一个容量为K的包包. 擂台赛一共有N项挑战,各项挑战依次进行.第i项挑战有一个属性ai,如果ai>=0,表示这次挑战成功后可以再获得一个容量为ai的包包:如

TYVJ-P1864 守卫者的挑战 题解

P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图……”瞬间,队员们被传送到了一个擂台上,最初身边有一个容量为K的包包. 擂台赛一共有N项挑战,各项挑战依次进行.第i项挑战有一个属性ai,如果ai

SHOI2016游记&amp;滚粗记&amp;酱油记

Day0 学校刚期中考完,全科血崩,感觉这次真要考不到一本线了tat 晚上写了个可持久化trie的题,也懒得敲板子(上个礼拜都敲过了),就碎叫了 Day1 上午起床吃饭水群看球,吃完中饭就去考场了. 下雨,路上花了挺长时间,到的挺晚的.然后就开考了. 这次和LN.JL是同一套卷子,感觉丢脸要丢到外省去了啊TAT 看题,T1是一棵树,然后可以插眼啥的题,求最小费用.感觉一脸可做啊,应该是树DP,感觉做过类似的题? 不过决定先看完题目.然后再看T2,网格图挖点求正方形个数,这怎么做啊qaq 然后再看