Submission #625006

#TimeUsernameProblemLanguageResultExecution timeMemory
625006Netr경주 (Race) (IOI11_race)C++14
0 / 100
8 ms9900 KiB
#include "race.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pi;

#define lsb(x) (x&(-x))
#define fs first
#define sd second
#define mp make_pair
#define pb push_back

#ifdef DEBUG
#define D(x...) printf(x);
#else
#define D(x...)
#endif

const ll MAXN = 2e5 + 5;
const ll INF = 1ll<<60;

ll N, K, sz[MAXN], sum[MAXN], dist[MAXN], ans = INF;
vector<pi> adj[MAXN];
map<ll, ll> *len[MAXN];

ll precomp(ll n, ll p, ll s, ll d){
    sz[n] = 1;
    sum[n] = s;
    dist[n] = d;
    for(auto &[e, w] : adj[n]){
        if(e == p) continue;
        sz[n] += precomp(e, n, s + w, d + 1);
    }
    return sz[n];
}

void dfs(ll n, ll p = 0){
    ll mx = -1, u = -1;
    
    for(auto &[e, w] : adj[n]){
        if(e == p) continue;
        if(sz[e] > mx){
            mx = sz[e];
            u = e;
        }
        dfs(e, n);
    }

    if(u == -1){
        len[n] = new map<ll, ll>();
    }else{
        len[n] = len[u];
    }

    (*len[n])[sum[n]] = dist[n];
    if(len[n]->count(K+sum[n])){
        ans = min(ans, (*len[n])[K+sum[n]] - dist[n]);
    }

    for(auto &[e, w] : adj[n]){
        if(e == p || e == u) continue;

        for(auto &[s, d] : *len[e]){
            if(len[n]->count(K-s+2*sum[n])){
                ans = min(ans, d + (*len[n])[K-s+2*sum[n]] - 2*dist[n]);
            }
            
            if(len[n]->count(s)){
                (*len[n])[s] = min((*len[n])[s], d);
            }else{
                (*len[n])[s] = d;
            }
        }
    }
}

int best_path(int N, int K, int H[][2], int L[])
{
    for(ll i = 1; i < N; i++){
        ll s, e, w;
        cin >> s >> e >> w;
        adj[s].pb({e, w});
        adj[e].pb({s, w});
    }

    precomp(0, 0, 0, 0);
    dfs(0);

    if(ans == INF){
        return -1;
    }else{
        return ans;
    }
}

Compilation message (stderr)

race.cpp: In function 'll precomp(ll, ll, ll, ll)':
race.cpp:31:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   31 |     for(auto &[e, w] : adj[n]){
      |               ^
race.cpp: In function 'void dfs(ll, ll)':
race.cpp:41:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   41 |     for(auto &[e, w] : adj[n]){
      |               ^
race.cpp:61:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   61 |     for(auto &[e, w] : adj[n]){
      |               ^
race.cpp:64:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   64 |         for(auto &[s, d] : *len[e]){
      |                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...