#include<bits/stdc++.h>
#include "dreaming.h"
#include<ext/pb_ds/assoc_container.hpp>
/**zagaro & lauren <3**/
#define mod 1000000007 //1e9 + 7
#define pi acos(-1)
#define wl while
#define str string
#define ENDL "\n"
#define sal ' '
#define tp_set ll
#define prc(n) cout.precision(n);cout<<fixed;
#define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update>
typedef long long ll;
typedef bool bl;
typedef char car;
using namespace std;
using namespace __gnu_pbds;
ll n, m, l;
vector<vector<pair<ll,ll> > > adj;
vector<bl> vis;
vector<pair<ll,ll> > may;
void dfs(ll nod, ll par){
vis[nod] = true;
for(int i=0;i<adj[nod].size();i++){
if(adj[nod][i].first != par){
dfs(adj[nod][i].first, nod);
if(may[adj[nod][i].first].first + adj[nod][i].second > may[nod].first){
may[nod].second = may[nod].first;
may[nod].first = may[adj[nod][i].first].first + adj[nod][i].second;
}
else if(may[adj[nod][i].first].first + adj[nod][i].second > may[nod].second){
may[nod].second = may[adj[nod][i].first].first + adj[nod][i].second;
}
}
}
return ;
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
ll nod, par, a, val, r=0, w=0, t, q;
n=N;m=M;l=L;
q = n-1-m;
adj.assign(n, vector<pair<ll,ll> > (0, {0, 0}));
vis.assign(n, false);
may.assign(n, {0,0});
for(int i=0;i<M;i++){
adj[A[i]].push_back({B[i], T[i]});
adj[B[i]].push_back({A[i], T[i]});
}
queue<tuple<ll,ll,ll> > pq;
vector<ll> vec;
for(int i=0;i<n;i++){
if(!vis[i]){
dfs(i, -1);
r = may[i].first;
w = max(w, may[i].first);
for(int j=0;j<adj[i].size();j++)pq.push({adj[i][j].first, i, adj[i][j].second});
wl(!pq.empty()){
tie(nod, par, val) = pq.front();
pq.pop();
if(may[par].first == may[nod].first+val)a=may[par].second;
else a=may[par].first;
a += val;
if(a > may[nod].first){
may[nod].second = may[nod].first;
may[nod].first = a;
}
else if(a > may[nod].second)may[nod].second = a;
w = max(w, may[nod].first);
r = min(r, may[nod].first);
for(int j=0;j<adj[nod].size();j++){
if(adj[nod][j].first != par){
pq.push({adj[nod][j].first, nod, adj[nod][j].second});
}
}
}
vec.push_back(r);
}
}
t = vec.size()-1;
sort(vec.begin(), vec.end());
if(q == 0){}
else if(q == 1)w = max(w, vec[t] + vec[t-1] + l);
else w = max(w ,max(vec[t] + vec[t-1] + l, vec[t-1]+vec[t-2]+2*l));
return w;
}
# | 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... |