Submission #1316890

#TimeUsernameProblemLanguageResultExecution timeMemory
1316890exoworldgdRace (IOI11_race)C++20
9 / 100
1495 ms327680 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=1005;
vector<array<int,2>>g[N];
int n,k,ans=1e9,mn[N][K];
void dfs(int u,int p){
	mn[u][0]=0;
	for(auto[v,w]:g[u]){
		if(v==p)continue;
		dfs(v,u);
		for(int i=0;i<=k;i++){
			if(mn[u][i]<1e9){
				int need=k-i;
				if(w<=need&&mn[v][need-w]<1e9)ans=min(ans,mn[u][i]+mn[v][need-w]+1);
			}
		}
		for(int i=0;i+w<=k;i++)if(mn[v][i]<1e9)mn[u][i+w]=min(mn[u][i+w],mn[v][i]+1);
	}
}
int best_path(int n_,int k_,int h[][2],int *l){
	n=n_,k=k_;
	for(int i=0;i<n;i++)for(int j=0;j<=k;j++)mn[i][j]=1e9;
	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]});
	dfs(0,-1);
	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...