#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0);//,cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define all(x) (x).begin(),(x).end()
#define ll long long
constexpr int maxN=1e5+5;
int n,m,l,dp[maxN],ans;
bitset<maxN> vis;
vector<pair<int,int>> adj[maxN];
void dfs(int now,int last){
dp[now] = 0;
vis[now] = 1;
for(auto [i,c]:adj[now])if(i!=last){
dfs(i,now);
ans = max(ans,dp[now]+dp[i]+c);
if(dp[i]+c>dp[now])dp[now] = dp[i]+c;
}
}
int dfs2(int now,int last,int val){
int ret = max(val,dp[now]);
vector<int> pref(1,0);
for(auto [i,c]:adj[now])if(i!=last)pref.emplace_back(max(pref.back(),dp[i]+c));
reverse(all(adj[now]));
for(auto [i,c]:adj[now])if(i!=last){
pref.pop_back();
ret = min(ret,dfs2(i,now,max(val,pref.back())+c));
val = max(val,dp[i]+c);
}
return ret;
}
int travelTime(int n, int m, int l, int A[], int B[], int T[]) {
ans = 0;
for(int i = 0;i<n;i++)adj[i].clear(),vis[i] = 0;
for(int a,b,c;m--;){
a = A[m],b = B[m],c = T[m];
adj[a].emplace_back(b,c);
adj[b].emplace_back(a,c);
}
vector<int> res;
for(int i = 0;i<n;i++)if(!vis[i]){
dfs(i,i);
int ret = dfs2(i,i,0);
for(int j = 0;j<3&&j<res.size();j++)if(res[j]<ret)swap(res[j],ret);
if(res.size()<3)res.emplace_back(ret);
}
if(res.size()>1)ans = max(ans,res[0]+res[1]+l);
if(res.size()>2)ans = max(ans,res[1]+res[2]+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... |