QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#508233 | #9110. Zayin and Tree | QFshengxiu | AC ✓ | 161ms | 25060kb | C++20 | 1.6kb | 2024-08-07 10:23:38 | 2024-08-07 10:23:40 |
Judging History
answer
#include <bits/stdc++.h>
#define QF \
ios_base::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0);
#define int long long
#define cl(x) cout << x << endl
using namespace std;
using PII = pair<int, int>;
const int inf = 1e18 + 10;
const int N = 1e6 + 10;
vector<int> g[N];
int n, ans;
int a[N], dp_min[N], dp_max[N], dep[N];
void dfs(int rt, int fa)
{
dep[rt] = dep[fa] + 1;
dp_max[rt] = dep[rt] - a[rt];
dp_min[rt] = dep[rt] + a[rt];
for (auto v : g[rt])
{
if (v == fa)
continue;
dfs(v, rt);
dp_max[rt] = min(dp_max[rt], dp_max[v]);
dp_min[rt] = min(dp_min[rt], dp_min[v]);
}
ans = min(ans, dp_max[rt] + dp_min[rt] - dep[rt] * 2 + 1);
}
void clear()
{
for (int i = 1; i <= n; i++)
{
g[i].clear();
}
ans = 0;
}
void solve()
{
// int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i < n; i++)
{
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
ans = inf;
dfs(1, 0);
cout << ans << endl;
clear();
}
signed main()
{
QF;
int T = 1;
cin >> T;
while (T--)
{
solve();
}
}
// 样例输入
// 9 8 5
// 1 2 3 4 5 6 7 8 9
// 1 2
// 1 3
// 2 4
// 2 5
// 4 7
// 3 6
// 6 8
// 6 9
// 5 6
// 4 5
// 7 8
// 7 3
// 8 9
// 输出
// 5 6 的父亲是 1
// 4 5 的父亲是 2
// 7 8 的父亲是 1
// 7 3 的父亲是 1
// 8 9 的父亲是 6
詳細信息
Test #1:
score: 100
Accepted
time: 161ms
memory: 25060kb
input:
3009 5 4 5 3 4 2 1 2 2 3 3 4 3 5 5 4 4 1 1 2 1 2 2 3 3 4 3 5 10 5 8 1 0 8 7 5 2 0 4 2 4 3 8 3 9 1 2 1 3 3 6 4 5 5 7 6 10 10 6 8 8 4 8 0 6 6 0 2 7 10 1 7 2 9 2 3 3 4 1 5 1 6 6 8 1 2 10 9 0 4 0 4 6 0 2 0 0 1 5 1 3 1 7 2 6 1 2 1 9 1 4 5 8 7 10 10 8 8 1 2 7 4 8 6 0 8 1 6 1 7 1 5 7 9 1 3 1 2 2 10 3 4 1 8...
output:
0 -1 -6 -6 -7 -6 -7 -4 -3 -7 -5 -6 -5 -4 -6 -3 -4 -7 -4 -4 -6 -6 -6 -5 -4 -5 -6 -6 -7 -7 -5 -7 -6 -6 -7 -6 -5 -5 -4 -6 -6 -5 -6 -6 -6 -6 -3 -6 -3 -6 -4 -6 -7 -6 -7 -6 -6 -5 -7 -6 -4 -7 -3 -5 -5 -6 -4 -5 -7 -6 -5 -5 -4 -3 -5 -3 -4 -2 -6 -5 -7 -4 -5 -5 -7 -7 -4 -6 -5 -4 -6 -5 -5 -6 -3 -6 -7 -7 -7 -6 -...
result:
ok 3009 lines