Submission #1369624

#TimeUsernameProblemLanguageResultExecution timeMemory
1369624nikakhRace (IOI11_race)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e5;

vector<pair<int, int>> G[MAXN];
vector<long long> pre;
int vis[MAXN], ans = MAXN;

void dfs(int u, long long D, int &K){
	vis[u] = 1;
	int find = lower_bound(pre.begin(), pre.end(), D - K) - pre.begin();
	if(find != (int)pre.size() && pre[find] == D - K){
		ans = min(ans, (int)pre.size() - find);
	}
	pre.push_back(D);
	for(auto &[v, L] : G[u]){
		if(vis[v]) continue;
		dfs(v, D + L, K);
	}
	pre.pop_back();
}

int best_path(int N, int K, int H[][2], int L[]){
	for(int i = 0; i < N - 1; i++){
		int u = H[i][0], v = H[i][1], l = L[i];
		G[u].push_back({v, l});
		G[v].push_back({u, l});
	}
	dfs(0, 0, K);
	return ans == MAXN ? -1 : ans;
}

// int main(){
// 	ios::sync_with_stdio(0);
// 	cin.tie(0);
// 	int N = 3, K = 3;
// 	int H[N - 1][2] = {{0, 1}, {1, 2}}, L[N - 1] = {1, 1};
// 	cout << best_path(N, K, H, L) << '\n';
// }
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...