This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define rep(i,x,n) for(decltype(n) i=x; i<n; i++)
using namespace std;
using pq=priority_queue<long>;
int main() {
ios_base::sync_with_stdio(false);cin.tie(nullptr);
int N, M; long r=0;
cin>>N>>M;
vector<int> W(N+M);
vector<vector<int>> G(N);
rep(i, 1, N+M) {
int j;
cin>>j>>W[i];
G[j-1].push_back(i);
r+=W[i];
}
function<pq(int)> f=[&](int i) {
pq q;
if(i<N) {
for(int j:G[i]) {
pq p=f(j);
if(q.size()<p.size()) swap(q, p);
while(p.size()) q.push(p.top()), p.pop();
}
rep(j, 1, G[i].size()) q.pop();
long x=q.top()+W[i]; q.pop();
long y=q.top()+W[i]; q.pop();
q.push(x), q.push(y);
} else q.push(W[i]), q.push(W[i]);
return q;
};
auto q=f(0);
long p=q.top(), k=0; q.pop();
while(q.size())
r-=k++*(p-q.top()), p=q.top(), q.pop();
cout<<r-k*p;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |