Submission #406090

#TimeUsernameProblemLanguageResultExecution timeMemory
406090tengiz05Swapping Cities (APIO20_swap)C++17
0 / 100
2092 ms14116 KiB
#include "swap.h" #include <bits/stdc++.h> constexpr int N = 1e5; std::vector<int> e[N]; std::vector<int> U, V, W; int n, m; void init(int n, int m, std::vector<int> U, std::vector<int> V, std::vector<int> W) { ::U = U; ::V = V; ::W = W; ::n = n; ::m = m; } std::vector<int> p; std::vector<bool> vis; bool have; void dfs(int u, int P) { p[u] = P; vis[u] = true; if (e[u].size() > 2) have = true; for (auto v : e[u]) { if (!vis[v]) { dfs(v, u); } } } bool check(int X, int Y, int mid) { for (int i = 0; i < n; i++) e[i].clear(); for (int i = 0; i < m; i++) { if (W[i] <= mid) { e[U[i]].emplace_back(V[i]); e[V[i]].emplace_back(U[i]); } } p.assign(n, -1); vis.assign(n, false); have = false; dfs(X, -1); if (p[Y] == -1) return false; if (have) { return true; } int y = Y; std::vector<int> got; y = p[y]; while (y != -1 && p[y] != -1) { got.push_back(y); y = p[y]; } y = Y; std::vector<bool> bad(n); for (auto x : got) { bad[x] = true; y = x; } for (int i = 0; i < n; i++) e[i].clear(); for (int i = 0; i < m; i++) { if (W[i] <= mid && !bad[U[i]] && !bad[V[i]] && !((U[i] == X && V[i] == Y) || (U[i] == Y && V[i] == X))) { e[U[i]].emplace_back(V[i]); e[V[i]].emplace_back(U[i]); } } p.assign(n, -1); vis.assign(n, false); dfs(X, -1); if (p[Y] != -1) return true; return false; } int getMinimumFuelCapacity(int X, int Y) { std::vector<int> v = W; sort(v.begin(), v.end()); int l = -1, r = v.size(); while (l + 1 < r) { int mid = (l + r) / 2; if (check(X, Y, v[mid])) { r = mid; } else { l = mid; } } if (r == v.size()) return -1; return v[r]; }

Compilation message (stderr)

swap.cpp: In function 'int getMinimumFuelCapacity(int, int)':
swap.cpp:84:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |     if (r == v.size()) return -1;
      |         ~~^~~~~~~~~~~
#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...