题意:n个城市n-1条边 组成一棵树 在每个城市修建消防站会有一个花费costi

每个城市能防火当且仅当地图上距离他最近的消防站距离小于di

    问如何修建消防站 使地图上所有的城市都有预防火灾的能力

题解: 这个题太难了..... 完全不会

具体来说就是用dp[i][j]表示在处理i这个城市的时候在j城市修消防站

如果dis i,j > di 那么表示这样修不合法就让dp[i][j] = INF

如果合法这样就已经确定了两个状态

那么我们同样采用先递归再回溯更新的方法 用ans[i]表示包含i的这棵子树已经处理好的最小值

那么回溯时肯定是由他的儿子转移过来

可以直接更新 dp[i][j] += ans[v] 最后dp[i][j] += costj

但可能有一种重复的情况 即j这个消防站既能保护i也能v

所以这种情况就是dp[i][j] += dp[v][j] - costj 减去重复计算的花费

最后再更新ans[i] = min(dp[i][j])j从1 - n

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;
const int INF = ; int n;
int cost[];
int d[];
int dis[];
int head[];
int ans[];
int dp[][]; struct node
{
int to, nex, val;
}E[]; void dfs1(int x, int fa)
{
int c = head[x];
for(int i = c; i; i = E[i].nex)
{
int v = E[i].to;
if(v == fa) continue;
dis[v] = dis[x] + E[i].val;
dfs1(v, x);
}
} void dfs2(int x, int fa)
{
int c = head[x];
for(int i = c; i; i = E[i].nex)
{
int v = E[i].to;
if(v == fa) continue;
dfs2(v, x);
} dis[x] = ;
dfs1(x, -); for(int i = ; i <= n; i++)
{
if(dis[i] > d[x])
{
dp[x][i] = INF;
continue;
} for(int j = c; j; j = E[j].nex)
{
int vv = E[j].to;
if(vv == fa) continue; dp[x][i] += min(ans[vv], dp[vv][i] - cost[i]);
}
dp[x][i] += cost[i];
}
for(int i = ; i <= n; i++) ans[x] = min(ans[x], dp[x][i]);
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
memset(dp, , sizeof(dp));
memset(ans, , sizeof(ans));
memset(head, , sizeof(head));
int cnt = ;
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d", &cost[i]);
for(int i = ; i <= n; i++) scanf("%d", &d[i]); for(int i = ; i < n; i++)
{
int u, v, o; scanf("%d%d%d", &u, &v, &o);
E[++cnt].to = v; E[cnt].nex = head[u]; head[u] = cnt; E[cnt].val = o;
E[++cnt].to = u; E[cnt].nex = head[v]; head[v] = cnt; E[cnt].val = o;
} dfs2(, -);
printf("%d\n", ans[]);
}
return ;
}

POJ2152 Fire (树形DP)的更多相关文章

  1. [poj2152]fire_树形dp

    fire poj-2152 题目大意:给出一颗树,给出两个相邻节点的距离,以及每个节点的接受范围,还有当前节点的代价.我们想要求出覆盖整个图的最小代价. 注释:一个点被覆盖,当且仅当该点有防火站或者这 ...

  2. POJ 2152 Fire(树形DP)

    题意: 思路:令F[i][j]表示 的最小费用.Best[i]表示以i为根节点的子树多有节点都找到负责消防站的最小费用. 好难的题... #include<algorithm> #incl ...

  3. poj2152 Fire(树形DP)

    题目链接:https://vjudge.net/problem/POJ-2152 题意:给定一颗大小为n的树,在每个结点建消防站花费为w[i],如果某结点没有消防站,只要在它距离<=d[i]的结 ...

  4. Fire (poj 2152 树形dp)

    Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...

  5. POJ 2152 Fire (树形DP,经典)

    题意:给定一棵n个节点的树,要在某些点上建设消防站,使得所有点都能够通过某个消防站解决消防问题,但是每个点的建站费用不同,能够保证该点安全的消防站的距离上限也不同.给定每个点的建站费用以及最远的消防站 ...

  6. 树形 DP 总结

    树形 DP 总结 本文转自:http://blog.csdn.net/angon823/article/details/52334548 介绍 1.什么是树型动态规划 顾名思义,树型动态规划就是在“树 ...

  7. 【转】【DP_树形DP专辑】【9月9最新更新】【from zeroclock's blog】

    树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树.三叉树.静态搜索树.AV ...

  8. 【DP_树形DP专题】题单总结

    转载自 http://blog.csdn.net/woshi250hua/article/details/7644959#t2 题单:http://vjudge.net/contest/123963# ...

  9. 树形dp总结

    转自 http://blog.csdn.net/angon823 介绍 1.什么是树型动态规划 顾名思义,树型动态规划就是在"树"的数据结构上的动态规划,平时作的动态规划都是线性的 ...

随机推荐

  1. 《炉石传说》架构设计赏析(4):Asset管理

    欢迎转载,请注明作者[燕良@游戏开发]及原文地址:http://blog.csdn.net/neil3d/article/details/39580197 另外.欢迎大家来我的QQ群交流各种游戏引擎相 ...

  2. ibatis 取消查询动态列的缓存

    ibatis在查询结果列不确定(或是动态变化)的情况下,会因为列缓存的原因导致变化后的列数据查不出来 解决方法是: select标签有个属性remapResults,该属性默认值为false,设置成r ...

  3. easyUI的下拉框combobox与树tree联动

    参与联动的有 2 个combobox 和 1 个tree: <input id="combobox1" class="easyui-combobox" n ...

  4. Eclipse的安装使用

    1.从官网下载最新的Eclipse http://www.eclipse.org/downloads/

  5. Robot Framework快捷键图标制作 去掉cmd命令窗口

    安装好Robot Framework之后,通过 C:\Python27\Scripts\ride.py 启动时会带上一个命令行窗口: 怎样让启动的界面后面不带这个命令行窗口,且图片以机器人显示? 方法 ...

  6. git如何避免每次pull或者push的时候都要输入用户名和密码?

    git config --global credential.helper store 这个命令则是在你的本地生成一个账号密码的本子似的东东,这样就不用每次都输入了(但是还得输入一次) 这个指令对于w ...

  7. Cordova 开发 App

    Cordova 是一个开源的移动开发框架.允许你用标准的 Web 技术——HTML5,CSS3 和 JavaScript 做跨平台开发.应用在每个平台的具体执行被封装了起来,并依靠符合标准的 API ...

  8. 【转】Material Design 折叠效果 Toolbar CollapsingToolbarLayout AppBarLayout

    我非常喜欢Material Design里折叠工具栏的效果,bilibili Android客户端视频详情页就是采用的这种设计.这篇文章的第二部分我们就通过简单的模仿bilibili视频详情页的实现来 ...

  9. Maven环境配置及命令行打包

    一配置环境变量 下载 apache-maven-3.2.5压缩包解压到本地  F:\apache-maven-3.2.5 配置MAVEN_HOME环境变量F:\apache-maven-3.2.5如图 ...

  10. 【POJ 1144】 Network

    [题目链接] 点击打开链接 [算法] Tarjan算法求割点 [代码] #include <algorithm> #include <bitset> #include < ...