Submission #1211678

#TimeUsernameProblemLanguageResultExecution timeMemory
1211678timeflewRace (IOI11_race)C++20
0 / 100
65 ms141120 KiB
#include<bits/stdc++.h>
#include "race.h"
using namespace std;

#define ll long long
#define ff first
#define ss second
#define all(x) x.begin(), x.end()

const int mxN=2e6;

vector<pair<int, ll>> adj[mxN];
multiset<pair<ll, int>> s[mxN];
int ans=1e9;
int k;

void dfs(int v, int fa) {
    for(auto [u, w] : adj[v]) {
        if(u==fa) continue;
        dfs(u, v);
        if(s[v].size()<s[u].size()) {
            s[v].swap(s[u]); 
        }
        for(auto [x, y] : s[u]) {
            auto it=s[v].lower_bound({k-w-x, 0});
            if(it!=s[v].end()&&(*it).ff==k-w-x) {
                ans=min(ans, (*it).ss+1);
            }
            s[v].insert({x+w, y+1});
        }
    }
}

int best_path(int N, int K, int H[][2], int L[]) {
    k=K;
    for(int i=0; i<N-1; i++) {
        s[i].insert({0, 0});
        adj[H[i][0]].push_back({H[i][1], L[i]});
        adj[H[i][1]].push_back({H[i][0], L[i]});
    }
    dfs(0, -1);
    return (ans==1e9?-1:ans);
}  

// int main() {
//     ios::sync_with_stdio(0); cin.tie(0);
//     int h[11][2], l[11];
//     int n, k; cin>>n>>k;
//     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<<best_path(n, k, h, l);
//     return 0;
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...