Submission #576514

#TimeUsernameProblemLanguageResultExecution timeMemory
576514ParsaEsSwapping Cities (APIO20_swap)C++14
100 / 100
318 ms31660 KiB
//InTheNameOfGOD //PRS;) #include<bits/stdc++.h> #include "swap.h" #define rep(i, l, r) for(ll i = l; i < r; i++) #define min(x, y) (x < y ? x : y) #define max(x, y) (x > y ? x : y) #define pb push_back #define X first #define Y second typedef int ll; using namespace std; typedef pair<ll, ll> pl; typedef pair<ll, pl> pi; constexpr ll inf = 2e9, xm = 2e5 + 5, xn = 1e5 + 5; vector<pl> p[xn]; vector<ll> g[xn]; pi e[xm]; ll ans[xn], d[xn], n, m; void init(ll N, ll M, vector<ll> U, vector<ll> V, vector<ll> W) { n = N, m = M; rep(i, 0, N) p[i].pb({0, i}), g[i].pb(i), ans[i] = inf; rep(i, 0, M) e[i] = {W[i], {U[i], V[i]}}; sort(e, e + M); rep(i, 0, M) { ll v = e[i].X, x = e[i].Y.X, y = e[i].Y.Y; ll x1 = p[x].back().Y, y1 = p[y].back().Y; if(x1 == y1) { ans[x1] = min(ans[x1], v); continue; } if(g[x1].size() < g[y1].size()) swap(x1, y1), swap(x, y); ans[x1] = min(ans[x1], max(ans[y1], v)), d[x]++, d[y]++; if(d[x] > 2 || d[y] > 2) ans[x1] = min(ans[x1], v); for(ll u : g[y1]) p[u].pb({v, x1}), g[x1].pb(u); } } ll getMinimumFuelCapacity(ll x, ll y) { ll i = p[x].size(), j = p[y].size(), ret = inf; i--, j--; while(i >= 0 && j >= 0 &&p[x][i].Y == p[y][j].Y) ret = min(ret, max(ans[p[x][i].Y], max(p[x][i].X, p[y][j].X))), i--, j--; return (ret >= inf ? -1 : ret); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...