제출 #1341429

#제출 시각아이디문제언어결과실행 시간메모리
1341429javkhlantogsFireworks (APIO16_fireworks)C++20
100 / 100
265 ms39772 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
	ll n,m,i,j,k,q;
	cin>>n>>m;
	vector<ll> p(n+m+1),c(n+m+1),deg(n+m+1,0);
	ll ans=0;
	for(i=2 ; i<=n+m ; i++){
		cin>>p[i]>>c[i];
		deg[p[i]]++;
		ans+=c[i];
	}
	vector<priority_queue<ll>> pq(n+m+1);
	for(i=n+m ; i>=2 ; i--){
		ll l=0,r=0;
		if(i<=n){
			while(--deg[i]) pq[i].pop();
			l=pq[i].top();
			pq[i].pop();
			r=pq[i].top();
			pq[i].pop();	
		}
		pq[i].push(l+c[i]);
		pq[i].push(r+c[i]);
		if(pq[i].size()>pq[p[i]].size()) swap(pq[i],pq[p[i]]);
		while(pq[i].size()){
			pq[p[i]].push(pq[i].top());
			pq[i].pop();
		}
	}
	while(deg[1]--) pq[1].pop();
	while(pq[1].size()){
		ans-=pq[1].top();
		pq[1].pop();
	}
	cout<<ans;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...