Submission #674243

#TimeUsernameProblemLanguageResultExecution timeMemory
674243mdubRace (IOI11_race)C++14
9 / 100
55 ms9052 KiB
#include <bits/stdc++.h>

using namespace std;

struct Edge {
	int to; int weight;
};

int n; int k;
vector<vector<Edge>> g;
vector<bool> seen;
map<int, stack<int>> mp;
vector<int> weights;
int ans;
void dfs(int iNode, int sum, int stage) {
	seen[iNode] = true;
	mp[sum].push(stage);
	if (!mp[sum- k].empty())
	    ans = min(ans, stage - mp[sum- k].top());

	for (auto adj: g[iNode]) {
		if (!seen[adj.to]) {
			dfs(adj.to, sum+adj.weight, stage + 1);
		}
	}
	mp[sum].pop();
	
			
}	

int best_path(int n2, int k2, int h[][2] , int l[] ) {
    n = n2; k = k2;
	g.resize(n);
	seen.assign(n, 0);
	ans = 1e9;
	for (int i = 0; i < n - 1; i++) {
		int n1 = h[i][0], n2 = h[i][1];
		g[n1].push_back({n2, l[i]});
		g[n2].push_back({n1, l[i]});
	}

	dfs(0, 0, 0);
	if (ans == 1e9) return -1;
	return 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...