This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "race.h"
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
using namespace std;
const int MX=200007, INF=1e9+7;
vector<pii> adj[MX];
map<int, pii> ada[MX];
int N, K, ret=INF;
void add(int i, int j, int x){
if(ada[i].count(j)){
pii now=ada[i][j];
if(now.se>x)
now.se=x;
if(now.fi>now.se)
swap(now.fi, now.se);
ada[i][j]=now;
}else{
ada[i][j]={x, INF};
}
}
void calc(int x){
cout << endl;
cout << x << endl;
for(auto ii:ada[x]){
int i=ii.fi, j=K-i;
cout << "i: " << i << endl;
if(i>=(K+1)/2)
break;
if(ada[x].count(i) && ada[x].count(j)){
cout << i << ' ' << j << " good\n";
ret=min(ret, ada[x][i].fi+ada[x][j].fi);
cout << ada[x][i].fi << " ::: " << ada[x][j].fi << endl;
}
}
if(K%2==0){
int k=K/2;
if(ada[x].count(k)){
pii tmp=ada[x][k];
if(tmp.se && tmp.se!=INF){
ret=min(ret, tmp.fi+tmp.se);
cout << "double: " << tmp.fi << ' ' << tmp.se << endl;
}
}
}
}
void DFS(int par, int wpar, int x){
ada[x][0]={0, INF};
for(auto i:adj[x]){
int v=i.fi, w=i.se;
if(v==par)
continue;
DFS(x, w, v);
if(ada[x].size()<ada[v].size())
swap(ada[x], ada[v]);
for(auto j:ada[v]){
int tot=j.fi, sisa=K-tot;
pii cnt=j.se;
if(tot>K)
continue;
if(ada[x].count(sisa)){
ret=min(ret, ada[x][sisa].fi+ada[v][tot].fi);
}
add(x, tot, cnt.fi);
add(x, tot, cnt.se);
}
}
if(!x)
return;
for(auto i=ada[x].rbegin(); i!=ada[x].rend(); i++){
pair<int, pii> tmp=*i;
tmp.se.fi++;
tmp.se.se++;
ada[x][tmp.fi+wpar]=tmp.se;
ada[x].erase(tmp.fi);
}
}
int best_path(int n, int k, int H[][2], int L[]){
N=n, K=k;
for(int i=0, u, v, w; i<N-1; i++){
u=H[i][0], v=H[i][1], w=L[i];
adj[u].pb({v, w});
adj[v].pb({u, w});
}
DFS(0, 0, 0);
return (ret>=INF?-1:ret);
}
# | 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... |