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;
const int N = 100100;
vector<int> dp[N],pre[N],suf[N];
vector<pair<int,int>> g[N];
int mx[N],vis[N];
void dfs1(int v,int p){
vis[v] = 1;
for(auto [u,w]: g[v]) if(u != p){
dfs1(u,v);
dp[v].push_back(w + mx[u]);
}
if(dp[v].size()) mx[v] = *max_element(dp[v].begin(), dp[v].end());
}
vector<int> mins;
int ans = 0;
void dfs2(int v,int p,int id,int bw){
if(p != -1){
int prMx = (id == 0 ? 0 : pre[p][id - 1]);
int suMx = (id == (int) suf[p].size() - 1 ? 0 : suf[p][id + 1]);
dp[v].push_back(max(prMx,suMx) + bw);
}
if(g[v].empty()){
mins.back() = 0;
return;
}
ans = max(ans,*max_element(dp[v].begin(),dp[v].end()));
mins.back() = min(mins.back(),*max_element(dp[v].begin(), dp[v].end()));
pre[v].resize(dp[v].size());
suf[v].resize(dp[v].size());
pre[v][0] = dp[v][0], suf[v].back() = dp[v].back();
for(int i = 1; i < dp[v].size(); i++){
pre[v][i] = max(pre[v][i-1],dp[v][i]);
}
for(int i = (int) dp[v].size() - 2; i >= 0; i--){
suf[v][i] = max(suf[v][i+1],dp[v][i]);
}
int ch = 0;
for(auto [u,w]: g[v]) if(u != p){
dfs2(u,v,ch++,w);
}
}
int travelTime(int n, int m, int l, int A[], int B[], int T[]) {
for(int i = 0; i < m; i++){
g[A[i]].emplace_back(B[i],T[i]);
g[B[i]].emplace_back(A[i],T[i]);
}
for(int i = 0; i < n; i++) if(!vis[i]){
mins.push_back(1e9);
dfs1(i,-1);
dfs2(i,-1,0,0);
}
sort(mins.rbegin(), mins.rend());
int maxP = mins[0];
for(int i = 1; i < mins.size(); i++){
ans = max(ans,maxP + l + mins[i]);
maxP = max(maxP,mins[i] + l);
}
return ans;
}
Compilation message (stderr)
dreaming.cpp: In function 'void dfs2(int, int, int, int)':
dreaming.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
35 | for(int i = 1; i < dp[v].size(); i++){
| ~~^~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:59:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
59 | for(int i = 1; i < mins.size(); i++){
| ~~^~~~~~~~~~~~~
# | 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... |