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 <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5;
int dp[NMAX];
vector<pair<int, int>> adj[NMAX], ans;
void dfs(int u, int e, int&maxlen) {
int f = 0, se = 0;
dp[u] = 0;
for (auto&x : adj[u]) {
int v = x.first, c = x.second;
if (v == e) continue;
dfs(v, u, maxlen);
dp[u] = max(dp[u], dp[v] + c);
if (f < dp[v] + c) se = f, f = dp[v] + c;
else se = max(se, dp[v] + c);
}
maxlen = max(maxlen, f + se);
}
void dfs2(int u, int e, int&curlen) {
int f = 0, se = 0;
if (curlen > dp[u]) curlen = dp[u];
for (auto&x : adj[u]) {
int v = x.first, c = x.second;
if (f < dp[v] + c) se = f, f = dp[v] + c;
else se = max(se, dp[v] + c);
}
for (auto&x : adj[u]) {
int v = x.first, c = x.second;
if (v == e) continue;
int curU = dp[u], curV = dp[v];
if (dp[v] + c != f) dp[u] = f;
else dp[u] = se;
dp[v] = max(dp[v], dp[u] + c);
dfs2(v, u, curlen);
dp[u] = curU, dp[v] = curV;
}
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
for (int i = 0; i < N; i++) dp[i] = -1;
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]});
}
int maxlen = 0, f = -1e9, se = -1e9, thi = -1e9;
for (int i = 0; i < N; i++) {
if (dp[i] != -1) continue;
dfs(i, 0, maxlen);
int curlen = 1e9;
dfs2(i, 0, curlen);
if (curlen > f) thi = se, se = f, f = curlen;
else if (curlen > se) thi = se, se = curlen;
else thi = max(thi, curlen);
}
return max({maxlen, f + L + se, se + 2*L + thi});
}
/*#define MAX_N 100000
static int A[MAX_N];
static int B[MAX_N];
static int T[MAX_N];
int main() {
int N, M, L, i;
int res;
//res = fscanf(f, "%d%d%d", &N, &M, &L);
cin >> N >> M >> L;
for (i = 0; i < M; i++) cin >> A[i] >> B[i] >> T[i];
// res = fscanf(f, "%d%d%d", &A[i], &B[i], &T[i]);
//fclose(f);
int answer = travelTime(N, M, L, A, B, T);
//printf("%d\n", answer);
cout << answer << '\n';
return 0;
}*/
# | 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... |