This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "dreaming.h"
using namespace std;
typedef pair<int,int> ii;
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
vector<ii> adjlist[N+1];
for (int i = 0; i < M; i++){
adjlist[A[i]].push_back(ii(B[i],T[i]));
adjlist[B[i]].push_back(ii(A[i],T[i]));
}
int p[N+1]; memset(p,-1,sizeof(p));
int d[N+1]; memset(d,0,sizeof(d));
int p1[N+1];memset(p1,-1,sizeof(p1));
int d1[N+1];memset(d1,0,sizeof(d1));
int best1, best2, best3;
best1 = best2 = best3 = -L;
int ans = 0;
for (int i = 0; i < N; i++){
if (p[i] == -1){
//printf("visiting %d comp\n",i);
p[i] = i;
d[i] = 0;
int s = i;
queue<int> q;
q.push(i);
while (q.size()){
int u = q.front(); q.pop();
for (auto v : adjlist[u]){
if (v.first == p[u]) continue;
p[v.first] = u;
d[v.first] = d[u]+v.second;
if (d[v.first] > d[s]){
s = v.first;
}
q.push(v.first);
}
}
p1[s] = s;
d1[s] = 0 ;
q.push(s);
int e = s;
while (q.size()){
int u = q.front(); q.pop();
for (auto v : adjlist[u]){
if (v.first == p1[u]) continue;
p1[v.first] = u;
d1[v.first] = d1[u]+v.second;
if (d1[v.first] > d1[e]){
e = v.first;
}
q.push(v.first);
}
}
int diameter = d1[e];
ans = max(ans,diameter);
int minimax = d1[e];
int cur = e;
while (cur != s){
minimax = min(minimax,max(diameter-d1[cur],d1[cur]));
cur = p1[cur];
}
//printf("%d %d %d\n",i,minimax,diameter);
if (minimax >= best1){
best3 = best2;
best2 = best1;
best1 = minimax;
}
else if (minimax >= best2){
best3 = best2;
best2 = minimax;
}
else if (minimax > best3){
best3 = minimax;
}
}
}
return max(ans,max(best1+best2+L,best2+best3+2*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... |