제출 #1341384

#제출 시각아이디문제언어결과실행 시간메모리
1341384javkhlantogsFireworks (APIO16_fireworks)C++20
0 / 100
1 ms344 KiB
#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
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);
	for(i=2 ; i<=n+m ; i++){
		cin>>p[i]>>c[i];
	}
	vector<vector<ll>> g(n+m+1);
	for(i=n+m ; i>=2 ; i--){
		if(i>n) g[i]={-1,c[i],c[i],-c[i]};
		if(i<=n){
			g[i][1]+=c[i];
			g[i][2]+=c[i];
			g[i][3]-=c[i];
		}
		if(g[p[i]].size()==0){
			g[p[i]]=g[i];
			continue;
		}
		if(g[i][2]>g[p[i]][2]) swap(g[i],g[p[i]]);
		ll l1=g[i][1],r1=g[i][2],k1=g[i][0],b1=g[i][3];
		ll l2=g[p[i]][1],r2=g[p[i]][2],k2=g[p[i]][0],b2=g[p[i]][3];
		ll k,l,r,b;
		if(l2>r1){
			r=l2;
			if(k2==-1){
				l=r1;
				k=-1;
				b=r2+b2+b1;
			}
				else{
					l=l2;
					k=k2+1;	
					b=r2+b2+b1;
				}
			g[p[i]]={k,l,r,b};
			continue;
		}
		if(l2<=l1 and r1<=r2){
			r=r1;
			l=l1;
			k=k1;
			b=r2+b2+b1;
			g[p[i]]={k,l,r,b};
			continue;
		}
		r=r1;
		l=l2;
		k=k2;
		b=b1+b2+r2;
		g[p[i]]={k,l,r,b};
	}
	ll ans=g[1][2]+g[1][3];
	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...