#pragma GCC optimize("O3")
#include "bits/stdc++.h"
#include "dreaming.h"
using namespace std;
vector<vector<array<int, 2>>> g;
vector<bool> used;
vector<int> dis1, dis2, nodes, par;
int n;
pair<int, int> findDiameter(int u) {
queue<int> q;
q.push(u);
dis1[u] = 0;
int start = u;
while (!q.empty()) {
auto v = q.front();
q.pop();
for (auto &[u, w] : g[v]) {
if (dis1[u] == 1e9) {
dis1[u] = dis1[v] + w;
if (dis1[u] > dis1[start]) start = u;
q.push(u);
}
}
}
q.push(start);
dis2[start] = 0;
par[start] = -1;
int finish = start;
while (!q.empty()) {
auto v = q.front();
q.pop();
used[v] = 1;
for (auto &[u, w] : g[v]) {
if (dis2[u] == 1e9) {
dis2[u] = dis2[v] + w;
par[u] = v;
if (dis2[u] > dis2[finish]) finish = u;
q.push(u);
}
}
}
int mid = 1e9, nodeMid = 0;
for (int v = finish; v != -1; v = par[v]) {
int cur = max(dis2[v], dis2[finish]- dis2[v]);
if (cur <= mid) {
nodeMid = v;
mid = cur;
}
}
return {dis2[finish], nodeMid};
}
array<int, 2> findCenter(int u) {
int ans = 1e9, cent;
auto [diameter, mid] = findDiameter(u);
return {dis2[mid], mid};
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
int m = M, l = L;
n = N;
dis1.resize(n + 1, 1e9);
dis2.resize(n + 1, 1e9);
par.resize(n + 1, 0);
g.resize(n + 1);
used.assign(n + 1, false);
for (int i = 0; i < m; i++) {
int u = A[i], v = B[i], w = T[i];
u++, v++;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
vector<array<int, 2>> mx;
for (int u = 1; u <= n; u++) {
if (used[u]) {
assert(dis2[u] != 1e9 && dis1[u] != 1e9);
continue;
}
mx.push_back(findCenter(u));
}
sort(mx.rbegin(), mx.rend());
for (int i = 1; i < size(mx); i++) {
g[mx[i][1]].push_back({mx[0][1], l});
g[mx[0][1]].push_back({mx[i][1], l});
}
int ans = 0;
fill(dis1.begin(), dis1.end(), 1e9);
fill(dis2.begin(), dis2.end(), 1e9);
ans = findDiameter(1).first;
return ans;
}
| # | 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |