제출 #765415

#제출 시각아이디문제언어결과실행 시간메모리
765415thinknoexit꿈 (IOI13_dreaming)C++17
100 / 100
63 ms20372 KiB
#include <bits/stdc++.h>
#include "dreaming.h"
using namespace std;
using ll = long long;
vector<pair<int, ll>> adj[100100];
bool vis[100100];
int big[100100];
ll dp[100100][2], mn, mx = 0;
void dfs(int v, int p = -1) {
    vis[v] = 1;
    for (auto& [x, w] : adj[v]) {
        if (x == p) continue;
        dfs(x, v);
        dp[v][1] = max(dp[v][1], dp[x][0] + w);
        if (dp[v][1] > dp[v][0]) swap(dp[v][0], dp[v][1]), big[v] = x;
    }
}
void dfs2(int v, int p = -1, ll prev = 0) {
    dp[v][1] = max(dp[v][1], prev);
    if (dp[v][1] > dp[v][0]) swap(dp[v][0], dp[v][1]);
    mn = min(mn, dp[v][0]);
    mx = max(mx, dp[v][0] + dp[v][1]);
    for (auto& [x, w] : adj[v]) {
        if (x == p) continue;
        if (x == big[v]) dfs2(x, v, max(prev, dp[v][1]) + w);
        else dfs2(x, v, max(prev, dp[v][0]) + w);
    }
}
int travelTime(int n, int m, int L, int a[], int b[], int c[]) {
    memset(big, -1, sizeof big);
    for (int i = 0;i < m;i++) {
        adj[a[i]].push_back({ b[i],c[i] });
        adj[b[i]].push_back({ a[i],c[i] });
    }
    vector<ll> ans;
    for (int i = 0;i < n;i++) {
        if (vis[i]) continue;
        mn = 1e18;
        dfs(i);
        dfs2(i);
        ans.push_back(mn);
    }
    sort(ans.begin(), ans.end(), greater<ll>());
    if (ans.size() == 1) {
        return mx;
    }
    if (ans.size() == 2) {
        return max(mx, ans[0] + ans[1] + L);
    }
    return max({ mx,ans[0] + ans[1] + L, ans[1] + ans[2] + 2 * L });
}
// int U[19], V[19], W[19];
// int main() {
//     int n, m, l;
//     cin >> n >> m >> l;
//     for (int i = 0;i < m;i++) {
//         cin >> U[i] >> V[i] >> W[i];
//     }
//     cout << travelTime(n, m, l, U, V, W);
// }
/*
12 8 2
0 8 4
8 2 2
2 7 4
5 11 3
5 1 7
1 3 1
1 9 5
10 6 3
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...