이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "race.h"
#include <bits/stdc++.h>
#define MAX 200001
#define INF INT_MAX
using namespace std;
multiset<pair<int,int>> a[MAX];
int k;
vector<int> dist;
vector<int> dep;
vector<vector<pair<int,int>>> g;
int res=INF;
void dfs(int v,int prev){
a[v].insert(make_pair(dist[v],dep[v]));
for(auto x:g[v]){
if(x.first==prev){
continue;
}
dist[x.first]=dist[v]+x.second;
dep[x.first]=dep[v]+1;
dfs(x.first,v);
if(a[v].size()<a[x.first].size()){
swap(a[v],a[x.first]);
}
for(auto y:a[x.first]){
auto it=a[v].lower_bound(make_pair(k+2*dist[v]-y.first,0));
if(it!=a[v].end() && (*it).first==k+2*dist[v]-y.first){
res=min(res,(*it).second+y.second-2*dep[v]);
}
}
for(auto y:a[x.first]){
a[v].insert(y);
}
}
}
int best_path(int N, int K, int H[][2], int L[])
{
k=K;
g.resize(N+1);
dist.resize(N+1,0);
dep.resize(N+1,0);
for(int i=0;i<N-1;i++){
g[H[i][0]].push_back(make_pair(H[i][1],L[i]));
g[H[i][1]].push_back(make_pair(H[i][0],L[i]));
}
dfs(0,-1);
if(res==INF){
res=-1;
}
return res;
}
/*
int main(){
int n,k;
cin >> n >> k;
int h[n-1][2];
int l[n];
for(int i=0;i<n-1;i++){
cin >> h[i][0] >> h[i][1];
}
for(int i=0;i<n-1;i++){
cin >> l[i];
}
cout << "h" << " " << best_path(n,k,h,l) << "\n";
}
*/
# | 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... |