Submission #1317124

#TimeUsernameProblemLanguageResultExecution timeMemory
1317124electron31Dreaming (IOI13_dreaming)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

namespace std {
    template<class Fun>
        class y_combinator_result {
            Fun fun_;
            public:
            template<class T>
                explicit y_combinator_result(T &&fun): fun_(std::forward<T>(fun)) {}

            template<class ...Args>
                decltype(auto) operator()(Args &&...args) {
                    return fun_(std::ref(*this), std::forward<Args>(args)...);
                }
        };

    template<class Fun>
        decltype(auto) y_combinator(Fun &&fun) {
            return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
        }
} 

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);

    int N, M, L; cin >> N >> M >> L;

    vector<vector<pair<int, int>>> adj(N);

    for(int i = 0;i < M; ++i){
        int u, v, w; cin >> u >> v >> w; 
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }

    vector<bool> vis(N, false);
    vector<int> A;

    auto dfs1 = y_combinator([&] (auto &&self, int s, int e, vector<int>& D) -> void{
        for(auto &[u, d]: adj[s]){
            if(u != e){
                vis[u] = true;
                D[u] = D[s] + d;
                self(u, s, D);
            }
        }
    });

    auto dfs2 = y_combinator([&] (auto &&self, int s, int e, vector<int> &D, vector<int> &H, int& mn) -> void{
        for(auto &[u, d]: adj[s]){
            if(u != e){
                D[u] = D[s] + d;
                self(u, s, D, H, mn);
                H[s] = H[u] + d;

                mn = min(mn, max(H[s], D[s]));
            }
        }
    });

    for(int i = 0;i < N; ++i){
        if(vis[i]) continue;
        vis[i] = true;
        vector<int> D(N, -1);
        D[i] = 0;
        dfs1(i, -1, D);

        int mx = 0, S = i;
        for(int j = 0;j < N; ++j){
            if(D[j] > mx){
                mx = D[j];
                S = j;
            }
        }

        if(S == i) continue;
        
        D = vector<int> (N, -1);
        vector<int> H(N, 0);
        H[S] = 0; D[S] = 0;
        int mn = 1e9;
        dfs2(S, -1, D, H, mn);
        A.push_back(mn);
    }

    sort(A.rbegin(), A.rend());
    if(A.size() == 1){
        cout << A[0] << "\n";
    }
    else{
        cout << A[0] + A[1] + L << "\n";
    }
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccLW858e.o: in function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'; /tmp/ccvCsonE.o:dreaming.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccLW858e.o: in function `main':
grader.c:(.text.startup+0xc5): undefined reference to `travelTime'
collect2: error: ld returned 1 exit status