Submission #1165618

#TimeUsernameProblemLanguageResultExecution timeMemory
1165618HappyCapybaraDreaming (IOI13_dreaming)C++17
100 / 100
118 ms16908 KiB
#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;

vector<bool> seen;
vector<vector<pair<int,int>>> g;

void calc(int i, unordered_map<int,int>& d){
    queue<pair<int,int>> q;
    q.push({i, 0});
    while (!q.empty()){
        int cur = q.front().first, dist = q.front().second;
        q.pop();
        seen[cur] = true;
        d[cur] = dist;
        for (pair<int,int> next : g[cur]){
            if (d.find(next.first) == d.end()) q.push({next.first, dist+next.second});
        }
    }
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    g.resize(N);
    for (int i=0; i<M; i++){
        g[A[i]].push_back({B[i], T[i]});
        g[B[i]].push_back({A[i], T[i]});
    }
    vector<int> rs;
    seen.resize(N, false);
    int ld = 0;
    for (int i=0; i<N; i++){
        if (seen[i]) continue;
        unordered_map<int,int> d1, d2;
        calc(i, d1);
        int bsf = -1, bo=i;
        for (auto &[i, d] : d1){
            if (d > bsf){
                bsf = d;
                bo = i;
            }
        }
        d1.clear();
        calc(bo, d1);
        bsf = -1;
        for (auto &[i, d] : d1){
            ld = max(ld, d);
            if (d > bsf){
                bsf = d;
                bo = i;
            }
        }
        calc(bo, d2);
        int res = pow(10, 9);
        for (auto &[i, d] : d1) res = min(res, max(d, d2[i]));
        rs.push_back(res);
    }
    if (M == N-1) return ld;
    sort(rs.begin(), rs.end());
    reverse(rs.begin(), rs.end());
    int res = ld;
    res = max(res, rs[0]+rs[1]+L);
    if (rs.size() > 2) res = max(res, rs[1]+rs[2]+2*L);
    return res;
}
#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...