Submission #1153351

#TimeUsernameProblemLanguageResultExecution timeMemory
1153351TroySerCyberland (APIO23_cyberland)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include "cyberland.h" #include <vector> using namespace std; using ll = long long; const ll INF = 1e15; vector<vector<ll> > adjList; map<pair<ll, ll>, ll> weightMat; UnionFind uf; class UnionFind { private: ll N; vector<ll> p, sz; public: UnionFind() {} UnionFind(ll _N) { N = _N; p.resize(N); sz.resize(N); for (ll i = 0; i < N; i++) { p[i] = i; sz[i] = 1; } } ll root(ll x) { if (p[x] != x) return p[x] = root(p[x]); return p[x]; } void unify(ll x, ll y) { x = root(x), y = root(y); if (x == y) return; if (sz[x] > sz[y]) swap(x, y); sz[y] += sz[x]; p[x] = p[y]; } }; double dijkstras(ll startingNode, vector<int> &A) { ll N = adjList.size(); priority_queue<pair<ll, ll>, vector<pair<ll, ll> >, greater<pair<ll, ll> > > pq; pq.push({0, startingNode}); // check if H is actually reachable to 0 vector<ll> distances(N, INF); distances[startingNode] = 0; while (!pq.empty()) { auto [currentDistance, currentNode] = pq.top(); pq.pop(); if (currentDistance > distances[currentNode]) { continue; } for (ll v: adjList[currentNode]) { if (currentDistance + weightMat[{currentNode, v}] < distances[v]) { distances[v] = currentDistance + weightMat[{currentNode, v}]; pq.push({distances[v], v}); } } } ll minimumPossible = INF; for (ll i = 0; i < N; i++) { if (A[i] == 0 || i == 0) minimumPossible = min(minimumPossible, distances[i]); } return (double)(minimumPossible); } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { adjList.clear(); weightMat.clear(); adjList.resize(N); uf = UnionFind(N); for (ll i = 0; i < M; i++) { adjList[x[i]].push_back(y[i]); adjList[y[i]].push_back(x[i]); weightMat[{x[i], y[i]}] = (double)c[i]; weightMat[{y[i], x[i]}] = (double)c[i]; uf.unify(x[i], y[i]); } if (uf.root(0) != uf.root(H)) return -1.0; double response = dijkstras(H, arr); if (response >= INF) { return -1.0; } else { return response; } }

Compilation message (stderr)

cyberland.cpp:13:1: error: 'UnionFind' does not name a type
   13 | UnionFind uf;
      | ^~~~~~~~~
cyberland.cpp: In function 'double solve(int, int, int, int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
cyberland.cpp:89:5: error: 'uf' was not declared in this scope
   89 |     uf = UnionFind(N);
      |     ^~