#include "dreaming.h"
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18;
const ll mod = 1e9 + 7;
vector <pii> q[N];
int cur[N], ans, put[N];
bool was[N];
int dfs1(int v, int pred){
was[v] = true;
int mx1 = 0, mx2 = 0;
for(auto u : q[v]){
if(u.F == pred) continue;
int rs = dfs1(u.F, v) + u.S;
if(rs > mx1){
mx2 = mx1;
mx1 = rs;
} else mx2 = max(mx2, rs);
put[v] = max(put[v], rs);
}
//ans = max(ans, mx1 + mx2);
return put[v];
}
void dfs3(int v, int pred, int sum){
ans = max(ans, sum);
for(auto u : q[v]){
if(u.F == pred) continue;
dfs3(u.F, v, sum + u.S);
}
}
int dfs2(int v, int pred){
pii u;
set <pii> st;
st.insert({0, -1});
for(int i = 0; i < (int)q[v].size(); i++){
u = q[v][i];
st.insert({put[u.F] + u.S, u.F});
}
for(int i = 0; i < (int)q[v].size(); i++){
u = q[v][i];
if(u.F == pred) continue;
st.erase({put[u.F] + u.S, u.F});
pii mx = *st.rbegin();
if(put[u.F] > mx.F + u.S){
put[v] = mx.F;
return dfs2(u.F, v);
}
st.insert({put[u.F] + u.S, u.F});
}
return st.rbegin()->F;
}
int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
for(int i = 0; i < m; i++){
q[a[i]].pb({b[i], t[i]});
q[b[i]].pb({a[i], t[i]});
}
vector <int> vec;
for(int i = 0; i < n; i++){
dfs3(i, -1, 0);
if(was[i]) continue;
dfs1(i, -1);
int mn = dfs2(i, -1);
vec.pb(mn);
//cout << i << " "<< mn << endl;
//cout << "NEW ONE\n\n";
}
sort(vec.begin(), vec.end());
int ss = (int)vec.size();
if((int)vec.size() >= 2) ans = max(ans, vec[ss - 1] + vec[ss - 2] + l);
if((int)vec.size() >= 3) ans = max(ans, vec[ss - 3] + vec[ss - 2] + 2 * l);
return ans;
}
// int main() {
// ios::sync_with_stdio(false);
// cin.tie(NULL);
// int n, m, l;
// cin >> n >> m >> l;
// int a[m], b[m], x[m];
// for(int i = 0; i < m; i++){
// cin >> a[i] >> b[i] >> x[i];
// }
// cout << travelTime(n, m, l, a, b, x);
// return 0;
// }
# | 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... |