Submission #1358837

#TimeUsernameProblemLanguageResultExecution timeMemory
1358837Charizard2021Dreaming (IOI13_dreaming)C++20
40 / 100
1096 ms12848 KiB
#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > adj;
vector<bool> visited;
vector<long long> res;
long long dfs(int u, int p){
    long long ans = 0;
    for(pair<int, int> x : adj[u]){
        int v = x.first;
        if(v != p){
            ans = max(ans, dfs(v, u) + x.second);
        }
    }
    return ans;
}
long long dfs2(int u, int p){
    visited[u] = true;
    long long ans = res[u];
    for(pair<int, int> x : adj[u]){
        int v = x.first;
        if(v != p){
            ans = min(ans, dfs2(v, u));
        }
    }
    return ans;
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]){
    adj.resize(N);
    visited.resize(N);
    res.resize(N);
    for(int i = 0; i < M; i++){
        adj[A[i]].push_back(make_pair(B[i], T[i]));
        adj[B[i]].push_back(make_pair(A[i], T[i]));
    }
    long long mxDiameter = 0;
    for(int i = 0; i < N; i++){
        res[i] = dfs(i, -1);
        mxDiameter = max(mxDiameter, res[i]);
    }
    vector<long long> thing;
    for(int i = 0; i < N; i++){
        if(!visited[i]){
            thing.push_back(dfs2(i, -1));
        }
    }
    sort(thing.begin(), thing.end());
    reverse(thing.begin(), thing.end());
    if((int)thing.size() > 1){
        long long stuff1 = thing[0] + thing[1] + L;
        if((int)thing.size() == 2){
            return max(stuff1, mxDiameter);
        }
        else{
            return max(max(stuff1, thing[1] + thing[2] + 2 * L), mxDiameter);
        }
    }
    else{
        return mxDiameter;
    }
}
// int main(){
//     int n, m, l;
//     cin >> n >> m >> l;
//     int a[m];
//     int b[m];
//     int t[m];
//     for(int i = 0; i < m; i++){
//         cin >> a[i] >> b[i] >> t[i];
//     }
//     cout << travelTime(n, m, l, a, b, t) << "\n";
// }
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...