Submission #384677

#TimeUsernameProblemLanguageResultExecution timeMemory
384677thecodingwizardCity Mapping (NOI18_citymapping)C++11
22 / 100
2073 ms620 KiB
#include <bits/stdc++.h> #include "citymapping.h" using namespace std; #define ii pair<int, int> #define f first #define s second #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() vector<ii> adj[1010]; int sz[1010]; ii pa[1010]; vector<pair<int, ii>> edges; int dfsSize(int u, int a1, int a2) { sz[u] = 1; for (ii v : adj[u]) { if (v.f == a1 || v.f == a2) continue; sz[u] += dfsSize(v.f, a1, a2); } return sz[u]; } ii getEndpoint(int u, int a1, int a2) { int best = -1; int bestDist = 0; for (ii v : adj[u]) { if (v.f == a1 || v.f == a2) continue; if (best == -1 || sz[best] < sz[v.f]) { best = v.f; bestDist = v.s; } } if (best == -1) return mp(u, 0); ii ret = getEndpoint(best, a1, a2); ret.s += bestDist; return ret; } void solve(int root, int avoid, int avoid2, int target, int rootToTarget) { dfsSize(root, avoid, avoid2); ii endpoint = getEndpoint(root, avoid, avoid2); //cout << root << " " << endpoint.f << endl; if (endpoint.f == root) { edges.pb(mp(rootToTarget, mp(root, target))); adj[root].pb(mp(target, rootToTarget)); pa[target] = mp(root, rootToTarget); //cout << "attaching " << target << " to " << root << " with weight " << rootToTarget << endl; } else { int d = (rootToTarget + get_distance(endpoint.f, target) - endpoint.s) / 2; int prevNode = -1; int node = endpoint.f; int nodeDist = endpoint.s; while (nodeDist != rootToTarget - d) { nodeDist -= pa[node].s; prevNode = node; node = pa[node].f; } solve(node, prevNode, avoid, target, d); } } void find_roads(int N, int Q, int A[], int B[], int W[]) { int root = 1; vector<ii> nodes; for (int i = 2; i <= N; i++) { nodes.pb(mp(get_distance(root, i), i)); } sort(all(nodes)); for (ii x : nodes) { //cout << "sovling for " << x.s << endl; solve(root, -1, -1, x.s, x.f); } for (int i = 0; i < N-1; i++) { A[i] = edges[i].s.f; B[i] = edges[i].s.s; W[i] = edges[i].f; } return; }
#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...