Submission #1316893

#TimeUsernameProblemLanguageResultExecution timeMemory
1316893exoworldgdRace (IOI11_race)C++20
0 / 100
1 ms332 KiB
#include<bits/stdc++.h>
#define ll long long
#define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0)
using namespace std;
const int N=2e5+5,K=1e6+5;
vector<array<int,2>>g[N];
int n,k,ans=1e9,sz[N],mn[K],del[N];
int dfs_sz(int u,int p){
	sz[u]=1;
	for(auto[v,w]:g[u])if(v!=p&&!del[v])sz[u]+=dfs_sz(v,u);
	return sz[u];
}
int centroid(int u,int p,int tot){
	for(auto[v,w]:g[u])if(v!=p&&!del[v]&&sz[v]*2>tot)return centroid(v,u,tot);
	return u;
}
void dfs(int u,int p,int d,int e,vector<array<int,2>>&paths){
	if(d>k)return;
	paths.push_back({d,e});
	for(auto [v,w]:g[u])if(v!=p&&!del[v])dfs(v,u,d+w,e+1,paths);
}
void solve(int u){
	int c=centroid(u,-1,dfs_sz(u,-1));
	del[c]=1;
	vector<vector<array<int,2>>>all;
	for(auto[v,w]:g[c]){
		if(del[v])continue;
		vector<array<int,2>>paths;
		dfs(v,c,w,1,paths),all.push_back(paths);
		for(auto[d,e]:paths)if(d<=k)ans=min(ans,mn[k-d]+e);
	}
	for(auto&paths:all)for(auto[d,e]:paths)if(d<=k)mn[d]=min(mn[d],e);
	for(auto&paths:all)for(auto[d,e]:paths)if(d<=k)mn[d]=1e9;
	for(auto[v,w]:g[c])if(!del[v])solve(v);
}
int best_path(int n_,int k_,int h[][2],int *l){
	n=n_,k=k_,fill(mn,mn+k+1,1e9),mn[0]=0;
	for(int i=0;i<n-1;i++)g[h[i][0]].push_back({h[i][1],l[i]}),g[h[i][1]].push_back({h[i][0],l[i]});
	solve(0);
	return ans==1e9?-1: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...