제출 #888532

#제출 시각아이디문제언어결과실행 시간메모리
888532dwuy경주 (Race) (IOI11_race)C++14
0 / 100
2 ms10588 KiB
//#include "race.h" #include <bits/stdc++.h> #define fi first #define se second using namespace std; typedef pair<int, int> pii; const int MX = 200005; int n, k, ans = MX; int numC[MX]; bitset<MX> vist; vector<pii> G[MX]; void calChild(int u, int p){ numC[u] = 1; for(pii &tmp: G[u]){ int v, c; tie(v, c) = tmp; if(v==p || vist[v]) continue; calChild(v, u); numC[u] += numC[v]; } } int Centroid(int u, int p, const int &half){ for(pii &tmp: G[u]){ int v = tmp.fi; if(v == p || vist[v]) continue; if(numC[v] > half) return Centroid(v, u, half); } return u; } int dis[MX]; int node[MX]; int getmap(map<int, int> &mp, int value){ auto itr = mp.find(value); if(itr == mp.end()) return 0; return itr->se; } int calValue(int u){ map<int, int> mp; int res = MX; mp[0] = 1; for(pii &tmp: G[u]){ int v, c; tie(v, c) = tmp; if (vist[v]) continue; vector<int> path; stack<pii> Q; Q.push({v, u}); node[v] = 2; dis[v] = c; while(Q.size()){ int u, p; tie(u, p) = Q.top(); Q.pop(); path.push_back(u); for(pii &tmp: G[u]){ int v, c; tie(v, c) = tmp; if(vist[v] || v == p) continue; Q.push({v, u}); dis[v] = dis[u] + c; node[v] = node[u] + 1; } } for(int vt: path) if(dis[vt]<=k){ int gm = getmap(mp, k - dis[vt]); if(gm) res = min(res, gm + node[vt] - 1); } for(int vt: path) if(dis[vt]<=k){ if(mp[dis[vt]]==0) mp[dis[vt]] = node[vt]; else mp[dis[vt]] = min(mp[dis[vt]], node[vt]); } } return res; } void dwuy_simp_nvpu(int u){ calChild(u, 0); u = Centroid(u, 0, numC[u]>>1); ans = min(ans, calValue(u)); vist[u] = 1; for(pii &tmp: G[u]){ int v = tmp.fi; if(!vist[v]) dwuy_simp_nvpu(v); } } int best_path(int N, int K, int H[][2], int L[]){ n = N; k = K; for(int i=0; i<n; i++){ int u = H[i][0]; int v = H[i][1]; int c = L[i]; u++, v++; G[u].push_back({v, c}); G[v].push_back({u, c}); } dwuy_simp_nvpu(1); return ans==MX? -1 : ans - 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...