Submission #1338544

#TimeUsernameProblemLanguageResultExecution timeMemory
1338544boclobanchatFireworks (APIO16_fireworks)C++20
7 / 100
2 ms344 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e5+5;
vector< pair<int,int> > ds[MAXN];
pair<long long,long long> range[MAXN];
long long ans=0;
void dfs(int i,int pre)
{
	vector<long long> vi;
	int sum=0,f=0;
	long long mx=0;
	for(auto v:ds[i])
	{
		dfs(v.first,i);
		mx=max(mx,range[v.first].first);
		vi.push_back(range[v.first].first+v.second);
		vi.push_back(range[v.first].second+v.second);
	}
	if(vi.empty()) return ;
	sort(vi.begin(),vi.end());
	range[i]={max(mx,vi[vi.size()/2-1]),max(mx,vi[vi.size()/2])};
	for(auto v:ds[i]) ans+=min(abs(range[v.first].first+v.second-range[i].first),abs(range[v.first].second+v.second-range[i].first));
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,m;
	cin>>n>>m;
	for(int i=2;i<=n+m;i++)
	{
		int l,r;
		cin>>l>>r;
		ds[l].push_back({i,r});
	}
	dfs(1,1);
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...