QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#508233#9110. Zayin and TreeQFshengxiuAC ✓161ms25060kbC++201.6kb2024-08-07 10:23:382024-08-07 10:23:40

Judging History

你现在查看的是最新测评结果

  • [2024-08-07 10:23:40]
  • 评测
  • 测评结果:AC
  • 用时:161ms
  • 内存:25060kb
  • [2024-08-07 10:23:38]
  • 提交

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