제출 #675643

#제출 시각아이디문제언어결과실행 시간메모리
675643vjudge1Race (IOI11_race)C++17
100 / 100
1002 ms43140 KiB
#define taskname "Race"
#include <bits/stdc++.h>
#define ll long long
#define ii pair<int,int>
#define ff first
#define ss second

using namespace std;
const int maxn = 2e5 + 10;
vector<ii> adj[maxn];
int sz[maxn], ban[maxn], m, ans = 1e9;
map<int,int> mp;

void DFSz(int u, int p = 0)
{
    sz[u] = 1;
    for (auto [v, c]: adj[u]) if (v != p && !ban[v]) DFSz(v, u), sz[u] += sz[v];
}

int getcen(int u, int need, int p = -1)
{
    if (sz[u] <= need) return p;
    ii big = {0, 0};
    for (auto [v, c]: adj[u]) if (v != p && !ban[v]) big = max(big, {sz[v], v});
    return getcen(big.ss, need, u);
}

void DFS(int u, int p, int dep, int type, int dis = 1)
{
    if (type == 0)
    {
        if (mp.count(m - dep)) ans = min(ans, dis + mp[m-dep]);
    }
    else mp[dep] = (mp.count(dep) ? min(mp[dep], dis) : dis);
    for (auto [v, c]: adj[u]) if (v != p && !ban[v]) DFS(v, u, dep+c, type, dis+1);
}

void solve(int u = 1)
{
    DFSz(u);
    u = getcen(u, sz[u]/2);
    ban[u] = 1;
    mp.clear();
    mp[0] = 0;
    for (auto [v, c]: adj[u]) if (!ban[v]) DFS(v, u, c, 0), DFS(v, u, c, 1);
    for (auto [v, c]: adj[u]) if (!ban[v]) solve(v);
}

int best_path(int N, int K, int H[][2], int L[])
{
    m = K;
    for (int i=1; i<=N; i++) adj[i].clear(), ban[i] = 0;
    for (int i=0; i<N-1; i++)
    {
        int u = H[i][0], v = H[i][1], c = L[i];
        u++, v++;
        adj[u].emplace_back(v, c);
        adj[v].emplace_back(u, c);
    }
    solve();
    return (ans == 1e9 ? -1 : ans);
}

//signed main()
//{
//    ios_base::sync_with_stdio(false);
//    cin.tie(nullptr); cout.tie(nullptr);
//    int h[3][2] = {{0, 1}, {1, 2}, {2, 3}};
//    int l[3] = {1, 2, 4};
//    cout<<best_path(4, 3, h, l);
//}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...