Submission #764643

#TimeUsernameProblemLanguageResultExecution timeMemory
764643raysh07Swapping Cities (APIO20_swap)C++17
0 / 100
2071 ms5488 KiB
#include "swap.h" #include <bits/stdc++.h> using namespace std; struct edge{ int u, v, w; }; int n, m; const int maxn = 1e5 + 69; vector <edge> e; int root[maxn], deg[maxn]; int find(int x){ if (x == root[x]) return x; return root[x] = find(root[x]); } void unite(int x, int y){ x = find(x); y = find(y); root[y] = x; } void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) { n = N; m = M; e.resize(m); for (int i = 0; i < m; i++) { e[i].u = U[i]; e[i].v = V[i]; e[i].w = W[i]; } } int getMinimumFuelCapacity(int x, int y) { int l = 0, r = 1e9 + 1; while (l != r){ int mid = (l + r)/2; for (int i = 0; i < n; i++){ root[i] = i; deg[i] = 0; } for (int i = 0; i < m; i++){ if (e[i].w > mid) continue; deg[e[i].u]++; deg[e[i].v]++; unite(e[i].u, e[i].v); } bool found = false; if (find(x) != find(y)) { l = mid + 1; continue; } for (int i = 0; i < n; i++){ if (find(i) == find(x) && deg[i] >= 3) //can turn here found = true; } if (found) r = mid; else l = mid + 1; } if (l > 1e9) return -1; return l; }
#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...