Submission #1370858

#TimeUsernameProblemLanguageResultExecution timeMemory
1370858edga1Tree (IOI24_tree)C++20
0 / 100
2095 ms22812 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
#include "tree.h"
using namespace std;

const int N=200005;
vector<int> g[N];
int w[N];
int n,l,r;
ll atb;

ll dfs(int v, int p){
    if(g[v].size()==1 && v!=0){
        atb+=w[v]*l;
        return l;
    }
    ll sum=0;
    for(auto u : g[v]){
        if(u==p) continue;
        sum+=dfs(u,v);
    }
    if(sum<=r) return sum;
    atb+=(sum-r)*w[v];
    return r;
}

void init(vector<int> P, vector<int> W) {
    n=(int)P.size();
    for(int i=0; i<n; i++) w[i]=W[i];
    for(int i=1; i<n; i++){
        g[i].pb(P[i]);
        g[P[i]].pb(i);
    }
}

long long query(int L, int R) {
    l=L; r=R;
    atb=0;
    dfs(0,0);
    return atb;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...