Submission #202380

#TimeUsernameProblemLanguageResultExecution timeMemory
202380cgiosyFireworks (APIO16_fireworks)C++17
100 / 100
263 ms60536 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...