#include "bits/stdc++.h"
#include <algorithm>
#include "dreaming.h"
using namespace std;
vector<vector<array<int, 2>>> g;
vector<bool> used;
vector<int> dis, nodes, path;
int n;
void dfs(int u, int p = -1) {
used[u] = 1;
nodes.push_back(u);
for (auto &[v, w] : g[u]) {
if (v == p) continue;
dis[v] = dis[u] + w;
dfs(v, u);
}
}
int findCenter(int u) {
dfs(u);
int ans = 0;
for (auto &v : nodes) {
dfs(v);
int node;
for (auto &z : nodes) {
if (dis[node] < dis[z]) {
z = node;
}
}
ans = min(ans, dis[node]);
}
return ans;
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
int m = M, l = L;
n = N;
dis.resize(n + 1);
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<int> mx;
for (int u = 1; u <= n; u++) {
if (used[u]) continue;
mx.push_back(findCenter(u));
}
sort(mx.rbegin(), mx.rend());
if (int(mx.size()) <= 2) return mx[0] + mx[1] + l;
return max(mx[1] + mx[2] + 2 * l, mx[0] + mx[1] + l);
}
| # | 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... |