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 "dreaming.h"
#include <vector>
#include <queue>
#include <functional>
#include <algorithm>
using namespace std;
#define MAXN 100005
static int N,M,L,ans;
static int mom[MAXN],momv[MAXN],clongest[MAXN];
static vector<int> con[MAXN],conv[MAXN],R;
static queue<int> que;
void bfs(int n)
{
int i,j,k,v,q;
que.push(n);
mom[n] = n;
vector <int> order;
while (!que.empty()){
q = que.front(); que.pop();
order.push_back(q);
for (i=con[q].size();i--;){
k = con[q][i], v = conv[q][i];
if (mom[k]) continue;
mom[k] = q, momv[k] = v;
que.push(k);
}
}
for (i=order.size();i--;){
n = order[i];
int max2=0;
for (j=con[n].size();j--;){
k = con[n][j], v = conv[n][j];
if (mom[n] == k) continue;
if (clongest[n] < clongest[k]+v)
max2 = clongest[n], clongest[n] = clongest[k]+v;
else if (max2 < clongest[k]+v)
max2 = clongest[k]+v;
}
if (ans < clongest[n]+max2)
ans = clongest[n]+max2;
}
}
void dfs(int n,int longest,int &minlen)
{
int i,k,v;
int max1=0,max2=0,maxp=0;
for (i=con[n].size();i--;){
k = con[n][i], v = conv[n][i];
if (mom[n] == k) continue;
if (max1 < clongest[k]+v)
max2 = max1, max1 = clongest[k]+v, maxp = k;
else if (max2 < clongest[k]+v)
max2 = clongest[k]+v;
}
if (minlen > max(longest,max1))
minlen = max(longest,max1);
if (maxp){
dfs(maxp,max(longest,max2)+momv[maxp],minlen);
}
}
void proc(int n)
{
int minlen=1e9;
bfs(n);
dfs(n,0,minlen);
R.push_back(minlen);
}
int travelTime(int n,int m,int l,int arr_a[],int arr_b[],int arr_t[])
{
int i,a,b,c;
N = n, M = m, L = l;
for (i=0;i<M;i++){
a = arr_a[i], b = arr_b[i], c = arr_t[i];
++a, ++b;
con[a].push_back(b), conv[a].push_back(c);
con[b].push_back(a), conv[b].push_back(c);
}
for (i=1;i<=N;i++) if (!mom[i]) proc(i);
sort(R.begin(),R.end(),greater<int>());
if (R.size() > 1){
if (ans < R[0]+R[1]+L)
ans = R[0]+R[1]+L;
}
if (R.size() > 2){
if (ans < R[1]+R[2]+L+L)
ans = R[1]+R[2]+L+L;
}
return ans;
}
# | 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... |