제출 #1341447

#제출 시각아이디문제언어결과실행 시간메모리
1341447javkhlantogsFireworks (APIO16_fireworks)C++20
100 / 100
269 ms44084 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();
	vector<ll> f;
	ll slope=-pq[1].size();
	while(pq[1].size()){
		f.push_back(pq[1].top());
		pq[1].pop();
	}
	sort(f.begin(),f.end());
	ll xbef=0;
	for(i=0 ; i<f.size() ; i++){
		ll xnow=f[i];
		ll deltax=xnow-xbef;
		ans+=deltax*slope;
		slope++;
		xbef=xnow;
	}
	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...