#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> tree;
vector<int> labels;
int n;
void dfs(int node, int mult, int prev, int d = 1) {
labels[node] = 1000 * mult + d;
for (auto next: tree[node]) {
if (next == prev) continue;
dfs(next, mult, node, d+1);
}
}
vector<int> label(int N, int k, vector<int> u, vector<int> v) {
n = N;
int center = 0;
tree.clear();
tree.resize(n);
labels.clear();
labels.assign(n, -1);
for (int i = 0; i < n-1; i++) {
tree[u[i]].push_back(v[i]);
tree[v[i]].push_back(u[i]);
}
for (int i = 1; i < n; i++) {
if (tree[i].size() == 1) center = i;
}
for (int i = 0; i < n; i++) {
if (tree[i].size() > 2) center = i;
}
labels[center] = 0;
int mult = 0;
for (auto next: tree[center]) {
dfs(next, mult, center);
mult++;
}
return labels;
}
int find_next_station(int s, int t, vector<int> c) {
int ch = c.size();
sort(c.begin(), c.end());
if (ch == 1) return c[0];
if (ch == 2) {
int compS = (s - 1) / 1000;
int compT = (t - 1) / 1000;
if (compT != compS) {
return c[0];
}
else {
return c[s < t];
}
}
else {
int compT = (t - 1) / 1000;
for (auto x: c) {
int compC = (x - 1) / 1000;
if (compC == compT) return x;
}
assert(false);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |