#include "race.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
int best_path(int N, int K, int H[][2], int L[])
{
queue<int> q;
vector<vector<int>> ln(N, vector<int>(0, 0));
map<pair<int, int>, int> m;
vector<vector<int>> dist(N, vector<int>(N,0));
int t = 0, mn = INT_MAX, nodoA, pro;
for (int i = 0; i < N - 1; i++)
{
ln[H[i][0]].pb(H[i][1]);
ln[H[i][1]].pb(H[i][0]);
m[mp(H[i][0], H[i][1])] = L[i];
m[mp(H[i][1], H[i][0])] = L[i];
}
for (int i = 0; i < N; i++)
{
nodoA = -1;
q.push(i);
dist[i][0] = 0;
t = 0;
pro=1;
while (q.size())
{
int nodo = q.front();
q.pop();
for (int j = 0; j < ln[nodo].size(); j++)
{
if (ln[nodo][j] == nodoA)
continue;
q.push(ln[nodo][j]);
dist[i][ln[nodo][j]] = dist[i][nodo] + m[mp(nodo, ln[nodo][j])];
if (dist[i][ln[nodo][j]] > K)
q.pop();
if (dist[i][ln[nodo][j]] == K)
{
mn = min(mn, pro);
t = 1;
break;
}
nodoA = nodo;
}
if (t == 1)
{
while (q.size())
{
q.pop();
}
}
pro++;
}
}
return (mn==INT_MAX?-1:mn);
}