제출 #535714

#제출 시각아이디문제언어결과실행 시간메모리
535714benedict0724Fireworks (APIO16_fireworks)C++17
7 / 100
5 ms7384 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

ll l[300002], r[300002], h[300002];
vector<pair<int, ll>> adj[300002];

void dfs(int x, ll p)
{
    if(adj[x].empty())
    {
        l[x] = r[x] = p;
        h[x] = 0;
        return;
    }
    vector<ll> v;
    for(auto u : adj[x])
    {
        int i = u.first; ll c = u.second;
        dfs(i, c);
        v.push_back(l[i]);
        v.push_back(r[i]);
    }

    sort(v.begin(), v.end());

    int s = adj[x].size();
    l[x] = v[s-1]; r[x] = v[s];
    h[x] = 0;
    for(auto u : adj[x])
    {
        int i = u.first;
        if(r[i] < l[x]) h[x] += h[i] + l[x] - r[i];
        else if(l[x] < l[i]) h[x] += h[i] + l[i] - l[x];
        else h[x] += h[i];
    }
    l[x] += p; r[x] += p;
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL);
    int n, m; cin >> n >> m;
    for(int i=2;i<=n+m;i++)
    {
        ll a, b; cin >> a >> b;
        adj[a].push_back({i, b});
    }

    dfs(1, 0); cout << h[1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...