#include "dreaming.h"
#include <bits/stdc++.h>
#define ti tuple<int, int, int>
using namespace std;
vector<pair<int, int>> g[100010];
vector<int> dis;
priority_queue<ti, vector<ti>, greater<ti>> pq;
int cno, cpa, cdi, nno, ndi, disa[100010], disb[100010], ans;
bool vi[100010];
int findMxRoot(int rt) {
vector<int> no;
int a, b;
pq.push({0, rt, -1});
while(pq.size()) {
cdi = get<0>(pq.top());
cno = get<1>(pq.top());
cpa = get<2>(pq.top());
pq.pop();
a = cno;
vi[cno] = 1;
no.push_back(cno);
for(auto i: g[cno]) {
nno = i.first;
ndi = cdi + i.second;
if(cpa == nno) continue;
pq.push({ndi, nno, cno});
}
}
pq.push({0, a, -1});
while(pq.size()) {
cdi = get<0>(pq.top());
cno = get<1>(pq.top());
cpa = get<2>(pq.top());
pq.pop();
b = cno;
disa[cno] = cdi;
for(auto i: g[cno]) {
nno = i.first;
ndi = cdi + i.second;
if(cpa == nno) continue;
pq.push({ndi, nno, cno});
}
}
pq.push({0, b, -1});
while(pq.size()) {
cdi = get<0>(pq.top());
cno = get<1>(pq.top());
cpa = get<2>(pq.top());
pq.pop();
disb[cno] = cdi;
for(auto i: g[cno]) {
nno = i.first;
ndi = cdi + i.second;
if(cpa == nno) continue;
pq.push({ndi, nno, cno});
}
}
int mxrt = 1e9;
for(int i: no) {
ans = max({ans, disa[i], disb[i]});
mxrt = min(mxrt, max(disa[i], disb[i]));
}
return mxrt;
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
for(int i=0; i<M; i++) {
g[B[i]].push_back({A[i], T[i]});
g[A[i]].push_back({B[i], T[i]});
}
for(int i=0; i<N; i++) {
if(!vi[i]) dis.push_back(findMxRoot(i));
}
sort(dis.begin(), dis.end());
int sz = dis.size();
if(sz == 1) ans = dis[0];
else if(sz == 2) ans = dis[0] + L + dis[1];
else ans = max(dis[sz-2]+dis[sz-3]+2*L, dis[sz-1]+dis[sz-2]+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... |