#include "race.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
#define pii pair<int,int>
#define vi vector<int>
#define vpii vector<pii>
#define loop(i,n) sloop(0,i,n)
#define sloop(s, i, n) for(int i=(s);i<(n);i++)
#define rloop(i,n) rsloop(0,i,n)
#define rsloop(s,i,n) for(int i=(n);i-->(s);)
#define all(v) (v).begin(),(v).end()
#define nie {cout<<"No\n";return;}
#define tak {cout<<"Yes\n";return;}
#ifdef DEBUG
#define DBG cout << __LINE__ << endl;
#else
#define DBG
#endif
//int xses[8] = {-1,1,0,0,-1,1,1,-1};
//int yses[8] = {0,0,-1,1,-1,1,-1,1};
//#define int ll
vector<vpii> graf;
int k;
int res = INT_MAX;
pair<pii,map<int,int>> dfs(int node,int p=-1){
pair<pii,map<int,int>> cur;
cur.F = {0,0};
for(pii i:graf[node]){
if(i.F==p)continue;
cur.S[i.S-cur.F.F]=1-cur.F.S;
if(i.S==k){
res=1;
}
auto [chng,a] = dfs(i.F,node);
chng.F+=i.S;chng.S++;
if(cur.S.size()<a.size()){
swap(cur.S,a);
swap(chng,cur.F);
}
for(pii j:a){
if(cur.S.count(j.F+chng.F-cur.F.F)){
res = min(res,j.S+chng.S+cur.S[j.F-cur.F.F]+cur.F.S);
}
}
for(pii j:a){
int u = j.F+chng.F - cur.F.F;
int v = j.S+chng.S - cur.F.S;
if(cur.S.count(u)){
cur.S[u]=min(cur.S[u],v);
}else{
cur.S[u]=v;
}
}
}
if(cur.S.count(k-cur.F.F)){
res=min(res,cur.S[k-cur.F.F]+cur.F.S);
}
/*
for(pii i:cur.S){
cout<<i.F+cur.F.F<<' '<<i.S+cur.F.S<<'\n';
}
*/
return cur;
}
int best_path(int N, int K, int H[][2], int L[])
{
int n = N;
k = K;
graf.assign(n,vpii());
loop(i,n-1){
int a = H[i][0];
int b = H[i][1];
int w = L[i];
graf[a].pb({b,w});
graf[b].pb({a,w});
}
dfs(0);
if(res==INT_MAX)res=-1;
return res;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |