#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<ll> dp;
vector<vector<pair<ll, ll>>> g;
vector<ll> d;
vector<ll> h;
void dfs(int k, int p){
d[k] = 1;
for(int y = 0; y < g[k].size(); y++){
if(g[k][y].first == p) continue;
dfs(g[k][y].first, k);
dp[k] = max(dp[k], dp[g[k][y].first]+g[k][y].second);
}
}
ll m = 2e18;
ll mmx = 0;
void reroot(ll k, ll p, ll up){
ll mx = 0;
ll mx1 = 0;
for(int y = 0; y < g[k].size(); y++){
if(g[k][y].first == p) continue;
if(mx < dp[g[k][y].first] + g[k][y].second){
mx1 = mx;
mx = dp[g[k][y].first] + g[k][y].second;
}else{
mx1 = max(mx1, dp[g[k][y].first] + g[k][y].second);
}
}
h[k] = max(dp[k], up);
for(int y = 0; y < g[k].size(); y++){
if(g[k][y].first == p) continue;
if(mx == dp[g[k][y].first]+g[k][y].second){
reroot(g[k][y].first, k, max(mx1, up)+g[k][y].second);
}else{
reroot(g[k][y].first, k, max(mx, up)+g[k][y].second);
}
}
mmx = max(mmx, h[k]);
m = min(m, h[k]);
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
g.clear();
g.resize(N);
for(int i = 0; i < M; i++){
g[A[i]].push_back({B[i], T[i]});
g[B[i]].push_back({A[i], T[i]});
}
mmx = 0;
d.clear();
d.resize(N);
h.clear();
h.resize(N);
dp.clear();
dp.resize(N);
vector<ll> s;
for(int i = 0; i < N; i++){
if(d[i] == 1) continue;
m = 2e18;
dfs(i, -1);
reroot(i, -1, 0);
s.push_back(m);
// cout << m << "\n";
}
sort(s.rbegin(), s.rend());
if(s.size() >= 2){
mmx = max(mmx, s[0] + s[1] + L);
}
if(s.size() >= 3){
mmx = max(mmx, s[1] + s[2] + 2*L);
}
// cout << mn << " " << mmx << endl;
return mmx;
}
| # | 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... |