Submission #26580

#TimeUsernameProblemLanguageResultExecution timeMemory
26580rubabredwanFactories (JOI14_factories)C++14
100 / 100
5826 ms205268 KiB
/* Bismillahir Rahmanir Rahim */ #include <bits/stdc++.h> #include "factories.h" using namespace std; typedef pair <int, int> pii; const int N = 500005; const long long oo = 1e18; vector < vector <pii>> g(N); vector < int > e[N]; long long mn[N], dis[N]; long long pre[N][25], idx[N]; int n, anc[N], sub[N], vis[N]; void dfs(int at, int par){ pre[at][++idx[at]] = dis[at]; sub[at] = 1; for(auto u : g[at]){ if(vis[u.first] || u.first == par) continue; dis[u.first] = dis[at] + u.second; dfs(u.first, at); sub[at] += sub[u.first]; } } void decompose(int at, int par, int tot){ int cen = 0, mx = -1; for(auto u : g[at]){ if(vis[u.first] || sub[u.first] > sub[at]) continue; if(sub[u.first] > mx){ cen = u.first; mx = sub[cen]; } } if(mx <= tot / 2){ if(par){ anc[at] = par; } tot = 0; vis[at] = 1; dis[at] = 0; dfs(at, at); for(auto u : g[at]){ if(!vis[u.first]){ decompose(u.first, at, sub[u.first]); } } } else decompose(cen, par, tot); } long long Query(int S, int X[], int T, int Y[]){ int cur, from, j; for(int i = 0; i < S; ++i){ cur = X[i] + 1, from = X[i] + 1, j = 1; for(j = idx[from]; j; --j){ mn[cur] = min(mn[cur], pre[from][j]); cur = anc[cur]; } } long long ret = oo; for(int i = 0; i < T; ++i){ cur = Y[i] + 1, from = Y[i] + 1, j = 1; for(j = idx[from]; j; --j){ ret = min(ret, pre[from][j] + mn[cur]); cur = anc[cur]; } } for(int i = 0; i < S; ++i){ cur = X[i] + 1; while(cur) mn[cur] = oo, cur = anc[cur]; } return ret; } void Init(int N, int A[], int B[], int D[]){ n = N; for(int i = 0; i < N - 1; ++i){ g[A[i] + 1].push_back({B[i] + 1, D[i]}); g[B[i] + 1].push_back({A[i] + 1, D[i]}); } memset(idx, -1, sizeof(idx)); dfs(1, 0); decompose(1, 0, sub[1]); for(int i = 1; i <= n; ++i) mn[i] = oo; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...