Submission #1190618

#TimeUsernameProblemLanguageResultExecution timeMemory
1190618zh_hSwapping Cities (APIO20_swap)C++17
37 / 100
2095 ms8120 KiB
#include<bits/stdc++.h> #define pb push_back using namespace std; vector<pair<int, pair<int, int>>> edge; int N, M; void init (int n, int m, vector<int> u, vector<int> v, vector<int> w) { for (int i = 0; i < m; i ++) { edge.pb({w[i], {u[i], v[i]}}); } sort(edge.begin(), edge.end(), [](pair<int, pair<int, int>> a, pair<int, pair<int, int>> b){ return a.first < b.first; }); N = n; M = m; } vector<int> parent(N); int find_parent(int v) { if (parent[v] == v) {return v;} parent[v] = find_parent(parent[v]); return parent[v]; } int getMinimumFuelCapacity (int x, int y) { parent.clear(); parent.resize(N); iota(parent.begin(), parent.end(), 0); vector<bool> swappable(N, false); vector<int> degree(N, 0); int ans = -1; for (int i = 0; i < M; i ++) { int a = edge[i].second.first, b = edge[i].second.second; degree[a] ++; degree[b] ++; if (find_parent(a) == find_parent(b)) { swappable[find_parent(a)] = true; } else { // not same parent => merge if (parent[a] > parent[b]) swap(a, b); if (swappable[parent[b]]) {swappable[parent[a]] = true;} if (degree[a] >= 3 || degree[b] >= 3) {swappable[parent[a]] = true;} parent[parent[b]] = parent[a]; } if (find_parent(x) == find_parent(y) && swappable[parent[x]]) { ans = edge[i].first; break; } } return ans; }
#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...