好难啊,我弱爆了。

题解看陈启峰的论文。。。

/**
* Problem:POJ2152
* Author:Shun Yao
* Time:2013.9.2
* Result:Accepted
* Memo:TreeDP
*/ #include <cstring>
#include <cstdio>
#include <climits> #define MAXN 1010
#define inf LONG_MAX long n, w[MAXN], d[MAXN], f[MAXN][MAXN], ff[MAXN], dist[MAXN]; long gtot;
class Edge {
public:
long v, w;
Edge *next;
Edge() {}
~Edge() {}
Edge(long V, long W, Edge *ne) : v(V), w(W), next(ne) {}
} *g[MAXN], gg[MAXN << 1]; void add(long x, long y, long w) {
g[x] = &(gg[gtot++] = Edge(y, w, g[x]));
g[y] = &(gg[gtot++] = Edge(x, w, g[y]));
} long min(long x, long y) {
return x < y ? x : y;
} void dis(long x) {
Edge *e;
for (e = g[x]; e; e = e->next)
if (dist[e->v] == -1) {
dist[e->v] = dist[x] + e->w;
dis(e->v);
}
} void dfs(long x, long pa) {
long i;
Edge *e;
for (e = g[x]; e; e = e->next)
if (e->v != pa)
dfs(e->v, x);
memset(dist, -1, sizeof dist);
dist[x] = 0;
ff[x] = inf;
dis(x);
for (i = 1; i <= n; ++i)
if (dist[i] > d[x])
f[x][i] = inf;
else {
f[x][i] = w[i];
for (e = g[x]; e; e = e->next)
if (e->v != pa)
f[x][i] += min(ff[e->v], f[e->v][i] - w[i]);
ff[x] = min(ff[x], f[x][i]);
}
} int main() {
static long T, i, j, u, v, l; #ifndef ONLINE_JUDGE
freopen("poj2152.in", "r", stdin);
freopen("poj2152.out", "w", stdout);
#endif scanf("%ld", &T);
while (T--) {
scanf("%ld", &n);
for (i = 1; i <= n; ++i)
scanf("%ld", w + i);
for (i = 1; i <= n; ++i)
scanf("%ld", d + i);
gtot = 0;
for (i = 1; i <= n; ++i)
g[i] = 0;
for (i = 1; i < n; ++i) {
scanf("%ld%ld%ld", &u, &v, &l);
add(u, v, l);
}
dfs(1, 0);
printf("%ld\n", ff[1]);
} fclose(stdin);
fclose(stdout);
return 0;
}

poj2152 Fire的更多相关文章

  1. POJ2152 Fire 【树形dp】

    题目链接 POJ2152 题解 经典老题,还真暴力 \(n \le 1000\),所以可以\(O(n^2)\)做 所以可以枚举每个点依附于哪一个点 设\(f[u]\)表示以\(u\)为根的子树的最小代 ...

  2. poj2152 Fire(树形DP)

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

  3. POJ-2152 Fire (树形DP)

    题目大意:在一棵树中选出一些点,选每个点的代价为w(i),并且对于点 i ,在距离它lim(i)之内必须选一个点,使它作为 i 的依赖点.求最小代价. 题目分析:定义状态dp(u,k)表示使u为根节点 ...

  4. POJ2152 Fire (树形DP)

    题意:n个城市n-1条边 组成一棵树 在每个城市修建消防站会有一个花费costi 每个城市能防火当且仅当地图上距离他最近的消防站距离小于di   问如何修建消防站 使地图上所有的城市都有预防火灾的能力 ...

  5. [SOJ #498]隔膜(2019-10-30考试)/[POJ2152]Fire

    题目大意:有一棵$n$个点的带边权树,第$i$个点有两个值$w_i,d_i$,表示在这个点做标记的代价为$w_i$,且这个点距离$d_i$以内至少要有一个点被标记,为最小代价.$n\leqslant6 ...

  6. 【POJ2152】Fire

    题目大意:给定一棵 N 个节点的无根树,点有点权,边有边权,现需要选出一个点集,满足树上任意一个点到该点集的距离不超过该点的给定值,求选出点集点权的最小值是多少. 题解:可以发现,对于以 i 为根的子 ...

  7. POJ 2152 fire / SCU 2977 fire(树型动态规划)

    POJ 2152 fire / SCU 2977 fire(树型动态规划) Description Country Z has N cities, which are numbered from 1 ...

  8. [poj2152]fire_树形dp

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

  9. 关于SequeezeNet中的Fire Module

    在论文<SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE>中,作者 ...

随机推荐

  1. 学习javascript总结下来的性能优化的小知识(一)

    http://www.cnblogs.com/ctriphire/p/4115525.html http://www.cnblogs.com/xjchenhao/archive/2012/10/22/ ...

  2. "Principles of Reactive Programming" 之<Actors are Distributed> (3)

    Cluster 讲课的这哥们接下来讲了下Akka Cluster的使用,但是是通过把一个以前讲过的actor 系统改成使用cluster来介绍的Akka cluster. 这部分代码很多,还是直接看视 ...

  3. Python的作用域

    Python的作用域 转自:http://www.cnblogs.com/frydsh/archive/2012/08/12/2602100.html Python是静态作用域语言,尽管它自身是一个动 ...

  4. MFC线程钩子和全局钩子[HOOK DLL]

    第一部分:API函数简介 1.       SetWindowsHookEx函数 函数原型 HHOOK SetWindowsHookEx( int idHook,        // hook typ ...

  5. [codility]Min-abs-sum

    https://codility.com/demo/take-sample-test/delta2011/ 0-1背包问题的应用.我自己一开始没想出来.“首先对数组做处理,负数转换成对应正数,零去掉, ...

  6. MyBatis-Spring 执行SQL语句的流程

    1. 从SqlSessionDaoSupport开始 通常我们使用MyBatis会让自己的DAO继承SqlSessionDaoSupport,那么SqlSessionDaoSupport是如何运作的呢 ...

  7. Android:再按一次退出程序

    感觉这种效果比较友好 //两秒内按返回键两次退出程序 private long exitTime = 0; @Override public boolean onKeyDown(int keyCode ...

  8. C#基础精华07(委托事件,委托的使用,匿名方法)

    1.委托概述 委托是一种数据类型,像类一样(可以声明委托类型变量).方法参数可以是int.string.类类型 void M1(int n){  } √ void M2(string s){  } √ ...

  9. Eclipse反编译工具Jad及插件JadClipse配置(转)

    Eclipse反编译工具Jad及插件JadClipse配置 Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不 ...

  10. 区分jquery中的offset和position

    一次又一次地碰到需要获取元素位置的问题, 然后一次又一次地查offset和position的区别. 忍不了了, 这次一定得想办法记下来. position是元素相对于父元素的位置. 这个好记, par ...