Submission #1145227

#TimeUsernameProblemLanguageResultExecution timeMemory
1145227asdfghjkRace (IOI11_race)C++20
0 / 100
1 ms2624 KiB
#include <bits/stdc++.h>
#define pb push_back
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define con continue
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ld;
typedef pair<ll,ll> pii;

const ll N = 1e5 + 5;
const ll MOD = 1e9 + 7;
const ll maxn = 6e5 + 5;
const ll inf = 1e9+1;
const ll INF = 1e18;
const ll K = 31;

/*vector <ll> z_function(string s){
//    ll n = s.size();
//    ll l = 0,r = 0;
//    vector <ll> z(n);
//    for(ll i = 1;i < n;i++){
//        if(i <= r){
//            z[i] = (r - i + 1,z[i - l]);
//        }
//        while(i + z[i] < n && s[z[i]] == s[z[i] + i]){
//            z[i]++;
//        }
//        if(i + z[i] - 1 > r){
//            r = i + z[i]-1;
//            l = i;
//        }
//    }
}*/

/*vector <ll> prefix_function(string s){
    ll n = s.size();
    vector <ll> pi(n,0);
    for(ll i = 1;i < n;i++){
        ll j = pi[i - 1];
        while(j > 0 && s[i] != s[j]){
            j = pi[j - 1];
        }
        if(s[i] == s[j])++j;
        pi[i] = j;
    }
    return pi;
}*/

vector <pii> g[N];
int d,ans = inf,C,was[N];
int get_sz(int v,int p,int n){
    int sz= 1 ;
    for(auto [to,w] : g[v]){
        if(was[to] || to == p)con;
        sz += get_sz(to,v,n);
    }
    if(!C && (sz+sz>=n || p == 0))C = v;
    return sz;
}
set <int> has;
map<int,int> val;
int dep[N],dis[N];
void dfs(int v,int p){
    if(has.count(d - dis[v]) == 1){
        ans = min(ans,(dep[v]+val[(d - dis[v])]));
    }
    for(auto [to,w] : g[v]){
        if(to == p || was[to])con;
        dis[to] = dis[v] + w;
        dep[to] = dep[v] + 1;
        dfs(to,v);
    }
}
void add(int v,int p){
    if(has.count(dis[v]) == 0){
        has.insert(dis[v]);
        val[dis[v]] = dep[v];
    }
    val[dis[v]] = min(val[dis[v]],dep[v]);
    for(auto [to,w] : g[v]){
        if(was[to] || to == p)con;
        add(to,v);
    }
}
void centr_decop(int v,int n){
    C = 0;
    get_sz(v,0,n);
    int c = C;
    has.clear();
    val.clear();
    dis[c] = dep[c] = 0;
    for(auto [to,w] : g[c]){
        if(was[to])con;
        dep[to] = dep[c] + 1;
        dis[to] = dis[c] + w;
        dfs(to,c);
        add(to,c);
    }
    was[c] = 1;
    for(auto  [to,w] : g[c]){
        if(was[to])con;
        centr_decop(to,n / 2);
    }
}
int best_path(int nn,int k,int h[][2],int l[]){
    int n = nn+1;
    d = k;
    for(int i = 1;i < n;i++){
        int u = h[i][0];
        int v = h[i][1];
        u++;
        v++;
        int w = l[i];
        g[u].pb({v,w});
        g[v].pb({u,w});
    }
    centr_decop(1,n);
    if(ans == inf)return -1;
    return ans;
}
//void solve(){
//}
//main(){
//    ios_base::sync_with_stdio(0);
//    cin.tie(0);
//    ll abd = 1;
////    freopen("yinyang.in","r",stdin);
////    freopen("yinyang.out","w",stdout);
//
////    cin >> abd;
//    for(ll i = 1;i <= abd;i++){
//        solve();
//    }
//}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...