1 条题解

  • 0
    @ 2024-9-5 20:31:48
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 2e5 + 5;
    int n, a[maxn], f[maxn];
    vector<int> g[maxn];
    
    void dfs(int u) {
    	f[u] = g[u].size() ? 1e9 : a[u];
    	for (auto v : g[u])
    		dfs(v), f[u] = min(f[u], f[v]);
    	if (u == 1)
    		cout << a[u] + f[u] << endl;
    	else if (f[u] > a[u])
    		f[u] = (f[u] + a[u]) / 2;
    }
    
    int main() {
    	cin >> n;
    	for (int i = 1; i <= n; i++)
    		cin >> a[i];
    	for (int i = 2; i <= n; i++) {
    		int p;
    		cin >> p;
    		g[p].push_back(i);
    	}
    	dfs(1);
    	return 0;
    }
    
    • 1

    信息

    ID
    25
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    15
    已通过
    6
    上传者