Submission #530470

#TimeUsernameProblemLanguageResultExecution timeMemory
530470hohohahaSwapping Cities (APIO20_swap)C++17
13 / 100
139 ms25356 KiB
#include<bits/stdc++.h> #include <vector> using namespace std; #define fori(i, a, b) for(int i = (int) (a); i <= (int) (b); i++) #define ford(i, a, b) for(int i = (int) (a); i >= (int) (b); i--) #define ii pair<int, int> #define fi first #define se second #define vi vector<int> #define eb emplace_back #define sp ' ' #define endl '\n' //#define int long long const int maxn = 2e5 + 5, inf = INT_MAX / 2; int n, m; vector<pair<int, ii> > E; int deg[maxn]; int fre[maxn]; int rt[maxn]; int dep[maxn]; int pe[maxn]; vi cc[maxn]; int getrt(int i) { if(rt[i] < 0) return i; return getrt(rt[i]); } void join(int i, int j, int w) { deg[i]++; deg[j]++; bool ok = max(deg[i], deg[j]) >= 3; i = getrt(i); j = getrt(j); // cout << w << sp << i << sp <<j << "cc" << endl; if(i == j) ok = 1; else { if(rt[i] > rt[j]) swap(i, j); rt[i] += rt[j]; rt[j] = i; for(int t: cc[j]) cc[i].eb(t); pe[j] = w; dep[j] = dep[i] + 1; } if(ok){ for(int x: cc[i]) fre[x] = w; cc[i].clear(); } } int get_lca(int u, int v) { if(dep[u] < dep[v]) swap(u, v); int mx = 0; while(dep[u] > dep[v]) { mx = max(mx, pe[u]); u = rt[u]; } while(u != v) { mx = max(mx, max(pe[u], pe[v])); u = rt[u]; v = rt[v]; } return mx; } void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n = N; m = M; fori(i, 0, m - 1) { int u = U[i] + 1, v = V[i] + 1, w = W[i]; E.eb(make_pair(w, ii(u, v))); } sort(begin(E), end(E)); fori(i, 1, n) { fre[i] = inf; rt[i] = -1; pe[i] = -1; cc[i].eb(i); } for(auto temp: E) { join(temp.se.fi, temp.se.se, temp.fi); } } int getMinimumFuelCapacity(int X, int Y) { int u = X + 1, v = Y + 1; // cout << get_lca(u, v) << endl; // fori(i, 1, n) { // cout << rt[i] << sp << pe[i] << sp << fre[i] << endl; // } int t = max(get_lca(u, v), min(fre[u], fre[v])); if(t == inf) return -1; return t; }
#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...