이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
int ans = 0;
vector<vector<pair<int,int>>>adj(N);
for (int i = 0;i<M;++i){
adj[A[i]].push_back({B[i],T[i]});
adj[B[i]].push_back({A[i],T[i]});
}
vector<vector<int>>nodes;
vector<vector<int>>dp(N,vector<int>(2,0));
vector<int>pre(N,0);
vector<bool>visited(N,false);
for (int i = 0;i<N;++i){
if (!visited[i]){
nodes.emplace_back();
function<void(int,int)>dfs = [&](int u,int par){
visited[u] = true;
nodes.back().push_back(u);
for (auto x:adj[u]){
if (x.first == par){
pre[u] = max(pre[x.first] + x.second,pre[u]);
continue;
}
dfs(x.first,u);
if (dp[x.first][0] + x.second > dp[u][0]){
dp[u][1] = dp[u][0];
dp[u][0] = dp[x.first][0] + x.second;
}
else if (dp[x.first][0] + x.second > dp[u][1]){
dp[u][1] = dp[x.first][0] + x.second;
}
}
};
dfs(i,-1);
}
}
vector<int>pos;
for (auto x:nodes){
int maxxy =1e9;
for (auto y:x){
int minny = 0;
function<void(int,int,int)> dfs2 = [&](int u,int par,int score){
minny = max(minny,score);
for (auto x:adj[u]){
if (x.first!=par){
dfs2(x.first,u,score + x.second);
}
}
};
dfs2(y,-1,0);
maxxy = min(maxxy,minny);
}
pos.push_back(maxxy);
}
sort(pos.begin(),pos.end());
if (pos.size() > 1){
ans = max(ans,pos[pos.size() - 1] + pos[pos.size() - 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... |