제출 #1230521

#제출 시각아이디문제언어결과실행 시간메모리
1230521zut3경주 (Race) (IOI11_race)C++20
9 / 100
159 ms38980 KiB
#include "race.h"
#include<bits/stdc++.h>

using namespace std;

int n, k;
vector<vector<pair<int, int>>> g;
vector<map<int, int>> d;

int mn = 2e9;
bool have_ans = false;

void dfs(int v, int prev) {

    for(auto [u, w]: g[v]) {
        if(prev == u) continue;

        dfs(u, v);
        d[v][w] = 1;
        for(int i = w+1; i <= k; i++) {
            if(!d[u].count(i-w)) continue;
            if(d[v].count(i)) d[v][i] = min(d[v][i], d[u][i-w]+1);
            else d[v][i] = d[u][i-w]+1;
        }
    }

    if(d[v].count(k)) {
        mn = min(mn, d[v][k]);
        have_ans = true;
    }
}

int best_path(int N, int K, int H[][2], int L[]) {
    n = N; k = K;

    g.assign(n, vector<pair<int, int>>());
    d.assign(n, map<int, int>());

    for(int i = 0; i < n-1; i++) {
        g[H[i][0]].push_back({H[i][1], L[i]});
        g[H[i][1]].push_back({H[i][0], L[i]});
    }

    dfs(0, -1);
    if(have_ans) return mn;
    return -1;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...