Submission #558632

#TimeUsernameProblemLanguageResultExecution timeMemory
558632promaSwapping Cities (APIO20_swap)C++17
0 / 100
2086 ms15572 KiB
#include "swap.h" #include <bits/stdc++.h> #define see(x) cout<<#x<<"="<<x<<"\n"; using namespace std; const int N = 1e5+5; int n, m, used[N], par[N], flag, cycleS, cycleF; vector <pair <int, int>> g[N]; vector <int> val; void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) { n = N; m = M; for (int i = 0; i < M; i ++) { g[U[i]].push_back({V[i], W[i]}); g[V[i]].push_back({U[i], W[i]}); val.push_back(W[i]); } sort(val.begin(), val.end()); } void dfs(int v, int p, int k, int x, int y) { used[v] = 1; par[v] = p; if (v != x and v != y and g[v].size() > 2) flag = 1; for (auto i: g[v]) { if (i.second > k or i.first == p) continue; if (used[i.first] and cycleS == -1) { cycleS = v; cycleF = i.first; } if (!used[i.first]) dfs(i.first, v, k, x, y); } } int getMinimumFuelCapacity(int X, int Y) { int l = 0, r = m - 1, best = -1; while (l <= r) { int mid = (l + r) / 2; flag = 0; cycleS = cycleF = -1; memset(used, 0, sizeof(used)); par[X] = -1; dfs(X, 0, val[mid], X, Y); if (cycleS != -1) { int f1 = 0, f2 = 0; for (int i = cycleS; i != par[cycleF]; i = par[i]) { if (i == X) f1 = 1; if (i == Y) f2 = 1; } if (f1 and f2) flag = 1; } if (used[Y] and flag) { best = val[mid]; r = mid - 1; } else { l = mid + 1; } } return best; }
#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...