Submission #558630

#TimeUsernameProblemLanguageResultExecution timeMemory
558630promaSwapping Cities (APIO20_swap)C++17
0 / 100
2068 ms17284 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]) { cycleS = i.first; cycleF = v; } else 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 cnt = 0; for (int i = cycleS; i != par[cycleF]; i = par[i]) { if (i == X or i == Y) cnt ++; } if (cnt > 1) 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...