求调D,马蜂良好
  • 板块学术版
  • 楼主水星湖psgqwq
  • 当前回复17
  • 已保存回复19
  • 发布时间2024/7/31 00:46
  • 上次更新2024/7/31 09:30:28
查看原帖
求调D,马蜂良好
974277
水星湖psgqwq楼主2024/7/31 00:46
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e5 + 5;

int n, t, x, a[N];
vector<int> p[N];

void dfs(int u) {
    for(auto v : p[u]) 
        dfs(v);
    if(!p[u].size()) return;
    int x = 2e9;
    for(int v : p[u]) 
        x = min(x, (int)(floor((a[v] - a[u]) / 2.0)));
    if(u != 1) 
        a[u] += x;
    else {
        int minn = 2e9;
        for(int v : p[u])
            minn = min(minn, a[v]);
        a[u] += minn;
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> t;
    while(t--) {
        cin >> n;
        for(int i = 1; i <= n; i++) cin >> a[i];
        for(int i = 1; i <= n; i++) p[i].clear();
        for(int i = 2; i <= n; i++) {
            int u; cin >> u;
            p[u].push_back(i);
        }
        dfs(1);
        cout << a[1] << endl;
    }
    A

    return 0;
}

2024/7/31 00:46
加载中...