Submission #429658

#TimeUsernameProblemLanguageResultExecution timeMemory
429658snasibov05Swapping Cities (APIO20_swap)C++14
100 / 100
435 ms32056 KiB
#include "swap.h" #include <vector> #include <algorithm> using namespace std; #define pii pair<int, int> #define f first #define s second #define pb push_back #define oo 1000000001 struct edge{ int u, v; int w; bool operator< (edge e) const{ return w < e.w; } }; vector<int> pr; vector<edge> ed; vector<int> deg; vector<vector<int>> cmp; vector<vector<pii>> arr; vector<int> when; void Union(edge e){ deg[e.u]++; deg[e.v]++; int x = pr[e.u]; int y = pr[e.v]; if (x == y){ when[x] = min(when[x], e.w); return; } if (cmp[x].size() < cmp[y].size()) swap(x, y); for (auto node : cmp[y]){ cmp[x].pb(node); pr[node] = x; arr[node].pb({x, e.w}); } cmp[y].clear(); if (when[y] != oo) when[x] = min(when[x], e.w); if (deg[e.u] >= 3 || deg[e.v] >= 3) when[x] = min(when[x], e.w); } void init(int n, int m, vector<int> u, vector<int> v, vector<int> w) { pr.resize(n); ed.resize(m); deg.resize(n); cmp.resize(n); arr.resize(n); when.resize(n); for (int i = 0; i < m; ++i) { ed[i].u = u[i]; ed[i].v = v[i]; ed[i].w = w[i]; } for (int i = 0; i < n; ++i) { pr[i] = i; cmp[i].pb(i); deg[i] = 0; arr[i].pb({i, 0}); when[i] = oo; } sort(ed.begin(), ed.end()); for (int i = 0; i < m; ++i) { Union(ed[i]); } } int getMinimumFuelCapacity(int x, int y) { int ans = 0; if (when[pr[x]] == oo) return -1; int cmpx = x, cmpy = y; int a = 0, b = 0; while (cmpx != cmpy || when[cmpx] == oo){ if (a == arr[x].size() || (b != arr[y].size() && arr[y][b].s < arr[x][a].s)){ cmpy = arr[y][b].f; ans = arr[y][b++].s; } else { cmpx = arr[x][a].f; ans = arr[x][a++].s; } } ans = max(ans, when[cmpx]); return ans; }

Compilation message (stderr)

swap.cpp: In function 'int getMinimumFuelCapacity(int, int)':
swap.cpp:92:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |         if (a == arr[x].size() || (b != arr[y].size() && arr[y][b].s < arr[x][a].s)){
      |             ~~^~~~~~~~~~~~~~~~
swap.cpp:92:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |         if (a == arr[x].size() || (b != arr[y].size() && arr[y][b].s < arr[x][a].s)){
      |                                    ~~^~~~~~~~~~~~~~~~
#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...