Submission #1144420

#TimeUsernameProblemLanguageResultExecution timeMemory
1144420gazizmadi11Race (IOI11_race)C++20
100 / 100
1246 ms48292 KiB
//gm --- akezhon #include <bits/stdc++.h> // #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define pb push_back #define pf push_front #define F first #define S second #define all(v) v.begin(),v.end() #define pii pair<int,int> #define tm (tl+tr)/2 #define TL v+v, tl, tm #define TR v+v+1, tm+1, tr #define DA l <= tl && tr <= r #define NE r < tl || tr < l #define double long double //#define int long long using namespace std; const int nN=3e5+7; const int mod=998244353; const int inf=2e9; vector <pii> g[nN]; int sz[nN]; bool del[nN]; int n, k; map<int,int>mp; int ans; int cent(int v, int par, int s){ for(auto [u, col] : g[v]){ if(u != par && del[u] == 0 && sz[u]*2 > s)return cent(u, v, s); } return v; } void get_sz(int v, int par){ sz[v] = 1; for(auto [u, col] : g[v]){ if(u != par && del[u] == 0){ get_sz(u, v); sz[v] += sz[u]; } } } void get(int v, int p, int a, int b){ if(a > k)return; if(a==k)ans = min(ans, b); else if(mp[k-a])ans = min(ans, b+mp[k-a]); for(auto [u, col] : g[v]){ if(del[u] == 1 || u == p)continue; get(u, v, a+col, b+1); } } void add(int v, int p, int a, int b){ if(a > k)return; if(mp[a] == 0){ if(a)mp[a] = b; } else mp[a] = min(mp[a], b); for(auto [u, col] : g[v]){ if(del[u] == 1 || u == p)continue; add(u, v, a+col, b+1); } } void build(int v){ get_sz(v, v); v = cent(v, v, sz[v]); del[v] = 1; mp.clear(); mp[0] = 0; for(auto [u, col] : g[v]){ if(del[u] == 1)continue; get(u, v, col, 1); add(u, v, col, 1); } for(auto [u, col] : g[v]){ if(del[u] == 0)build(u); } } int best_path(int N, int K, int H[][2], int L[]) { k=K; for(int i=0; i < N-1; i++){ int a = H[i][0], b = H[i][1], col = L[i]; g[a].pb({b, col}); g[b].pb({a, col}); } ans = 1e9; build(0); if (ans == 1e9)ans = -1; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...