Submission #684434

#TimeUsernameProblemLanguageResultExecution timeMemory
684434PoonYaPatFireworks (APIO16_fireworks)C++14
100 / 100
218 ms75636 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int n,m;
ll w[300001],ans;
vector<int> adj[300001];
priority_queue<ll> q[300001];

void dfs(int x) {

    if (adj[x].size()==0) {
        q[x].push(w[x]);
        q[x].push(w[x]);
        return;
    }

    for (auto s : adj[x]) {
        dfs(s);
        if (q[s].size()>q[x].size()) swap(q[s],q[x]);
        while (!q[s].empty()) q[x].push(q[s].top()), q[s].pop();
    }

    for (int i=1; i<adj[x].size(); ++i) q[x].pop();
    ll a=q[x].top()+w[x]; q[x].pop();
    ll b=q[x].top()+w[x]; q[x].pop();
    q[x].push(a); q[x].push(b);
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n>>m;
    for (int i=2; i<=n+m; ++i) {
        int u; cin>>u>>w[i];
        adj[u].push_back(i);
    }
    for (int i=1; i<=n+m; ++i) ans+=w[i];
    dfs(1);

    q[1].pop();
    while (!q[1].empty()) ans-=q[1].top(), q[1].pop();
    cout<<ans;
}

Compilation message (stderr)

fireworks.cpp: In function 'void dfs(int)':
fireworks.cpp:24:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for (int i=1; i<adj[x].size(); ++i) q[x].pop();
      |                   ~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...