Submission #657032

#TimeUsernameProblemLanguageResultExecution timeMemory
657032600MihneaSwapping Cities (APIO20_swap)C++17
37 / 100
2070 ms8136 KiB
#include "swap.h" #include <bits/stdc++.h> using namespace std; const int INF = (int) 1e9 + 7; int n; int m; vector<int> t; vector<int> dim; vector<int> is_line; vector<int> is_endpoint; int root(int a) { if (t[a] == a) { return t[a]; } else { return root(t[a]); } } void join(int a, int b, int val) { int x = a, y = b; a = root(a); b = root(b); if (a == b) { is_line[a] = 0; return; } if (dim[a] < dim[b]) { swap(a, b); swap(x, y); } /// dim[a] >= dim[b] //if (rng() & 1) { // swap(a, b); // } if (is_line[a] && is_line[b] && is_endpoint[x] && is_endpoint[y]) { is_line[a] = 1; if (dim[a] > 1) { is_endpoint[x] = 0; } if (dim[b] > 1) { is_endpoint[y] = 0; } } else { is_line[a] = 0; } dim[a] += dim[b]; t[b] = a; } void clr() { t.resize(n); is_line.resize(n); is_endpoint.resize(n); dim.resize(n); for (int i = 0; i < n; i++) { t[i] = i; is_line[i] = 1; is_endpoint[i] = 1; dim[i] = 1; } } struct Edge { int a; int b; int w; }; bool operator < (Edge first, Edge second) { return first.w < second.w; } vector<Edge> edges; void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) { n = N; m = M; assert((int) U.size() == m); assert((int) V.size() == m); assert((int) W.size() == m); edges.clear(); for (int i = 0; i < m; i++) { edges.push_back({U[i], V[i], W[i]}); } sort(edges.begin(), edges.end()); } int getMinimumFuelCapacity(int x, int y) { clr(); for (auto &edge : edges) { int a = edge.a; int b = edge.b; int w = edge.w; join(a, b, w); //cout << a << " " << b << " | " << w << " and I care about " << x << " " << y << "\n"; if (root(x) == root(y) && !is_line[root(x)]) { return w; } } 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...