#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#define INF 0x3f3f3f3f
#define rep0(i, n) for (int i = 0; i < n; i++)
#define rep1(i, n) for (int i = 1; i <= n; i++)
#define rep_0(i, n) for (int i = n - 1; i >= 0; i--)
#define rep_1(i, n) for (int i = n; i > 0; i--)
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#define mem(x, y) memset(x, y, sizeof(x))
#define MAXN 1000 + 10
using namespace std;
struct Edge
{
int from, to, weight;
Edge(int f, int t, int w): from(f), to(t), weight(w) {}
};
int w[MAXN], d[MAXN], dis[MAXN][MAXN], dp[MAXN][MAXN], ans[MAXN];
vector<Edge> edges;
vector<int> g[MAXN];
void init(int n)
{
edges.clear();
rep1(i, n)
g[i].clear();
mem(dis, 0);
mem(dp, 0);
mem(ans, 0x3f);
}
void addEdge(int u, int v, int len)
{
edges.push_back(Edge(u, v, len));
edges.push_back(Edge(v, u, len));
g[u].push_back(edges.size() - 2);
g[v].push_back(edges.size() - 1);
}
void dfs_dis(int root, int u, int fa)
{
for (int i = 0; i < g[u].size(); i++)
{
Edge e = edges[g[u][i]];
if (e.to == fa)
continue;
dis[root][e.to] = dis[e.to][root] = dis[root][u] + e.weight;
dfs_dis(root, e.to, u);
}
}
void dfs(int n, int u, int fa)
{
for (int i = 0; i < g[u].size(); i++)
{
Edge e = edges[g[u][i]];
if (e.to == fa)
continue;
dfs(n, e.to, u);
}
for (int j = 1; j <= n; j++)
{
if (dis[u][j] > d[u])
{
dp[u][j] = INF;
continue;
}
dp[u][j] = w[j];
for (int i = 0; i < g[u].size(); i++)
{
Edge e = edges[g[u][i]];
if (e.to == fa)
continue;
dp[u][j] += MIN(ans[e.to], dp[e.to][j] - w[j]);
}
ans[u] = MIN(ans[u], dp[u][j]);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
int t, n, u, v, l;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
init(n);
rep1(i, n)
{
scanf("%d", w + i);
}
rep1(i, n)
scanf("%d", d + i);
rep0(i, n - 1)
{
scanf("%d %d %d", &u, &v, &l);
addEdge(u, v, l);
}
rep1(i, n)
dfs_dis(i, i, -1);
dfs(n, 1, -1);
printf("%d\n", ans[1]);
}
return 0;
}
poj2152_Fire(树形DP)
最新推荐文章于 2020-02-20 11:08:59 发布