# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
499286 | 2021-12-27T19:04:04 Z | blue | City Mapping (NOI18_citymapping) | C++17 | 0 ms | 0 KB |
#include "citymapping.h" #include <vector> #include <iostream> using namespace std; using ll = long long; using vi = vector<int>; struct edge { ll w; int u; int v; }; bool operator < (edge A, edge B) { return A.w < B.w; } void find_roads(int N, int Q, int A[], int B[], int W[]) { vector<edge> E; for(int i = 1; i <= N; i++) for(int j = i+1; j <= N; j++) E.push_back(edge{get_distance(i, j), i, j}); sort(E.begin(), E.end()); int ct = -1; vi cc(N+1); for(int i = 1; i <= N; i++) cc[i] = i; // for(auto e: E) cerr << get<1>(e) << ' ' << get<2>(e) << ' ' << get<0>(e) << '\n'; for(auto e: E) { ll w = e.w; int u = e.u; int v = e.v; if(cc[u] == cc[v]) continue; int ccu = cc[u]; for(int i = 1; i <= N; i++) if(cc[i] == ccu) cc[i] = cc[v]; ct++; A[ct] = u; B[ct] = v; W[ct] = w; } }