제출 #1310919

#제출 시각아이디문제언어결과실행 시간메모리
1310919hitsuuj경주 (Race) (IOI11_race)C++20
31 / 100
458 ms82464 KiB
#include "race.h"
#include <bits/stdc++.h>
using namespace std; 
#define pii pair<int,int> 
#define pb push_back
#define inf 1e9
const int lim=2e5;
vector<pii>g[lim+10];
int dis[lim+10]; 
vector<int>l(lim+10);
int ans=inf,n,k; 
map<int,int> dfs(int u,int par,int dep){
    map<int,int>cur;
    cur[dis[u]]=dep;
    for(auto [v,w]:g[u]){
        if(v==par) continue; 
        dis[v]=dis[u]+w;
        map<int,int> anak=dfs(v,u,dep+1);
        if(anak.size()>cur.size()){ 
            swap(cur,anak);
        }
        for(auto [x,y]:anak){
            if(!y) continue;
            int tar=k-x+2*dis[u];
            if(cur[tar]){
                ans=min(ans,cur[tar]+y-2*dep);
            }
            if(cur[x]) cur[x]=min(cur[x],y);
            else cur[x]=y;
        }
    }

    return cur; 
}
int best_path(int N, int K, int H[][2], int L[])
{
    n=N,k=K;
    for(int i=0;i<n-1;i++){
        g[H[i][0]].pb({H[i][1],L[i]}); 
        g[H[i][1]].pb({H[i][0],L[i]}); 
    }
    dfs(1,-1,0);
    if(ans==inf) 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...