Submission #1301949

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

using ll = long long;

struct Edge{ int to, w; };

static pair<int,ll> farthest(int src, const vector<vector<Edge>>& g, const vector<int>& nodes, const vector<char>& inComp, vector<ll>* outDist) {
    vector<ll> dist(g.size(), -1);
    vector<int> st;
    st.reserve(nodes.size());
    st.push_back(src);
    dist[src] = 0;
    vector<int> par(g.size(), -1);

    while(!st.empty()){
        int v = st.back(); st.pop_back();
        for(auto e: g[v]){
            int u = e.to;
            if(!inComp[u]) continue;
            if(u == par[v]) continue;
            if(dist[u] != -1) continue;
            par[u] = v;
            dist[u] = dist[v] + e.w;
            st.push_back(u);
        }
    }

    int bestV = src;
    ll bestD = 0;
    for(int v: nodes){
        if(dist[v] > bestD){
            bestD = dist[v];
            bestV = v;
        }
    }

    if(outDist) *outDist = std::move(dist);
    return {bestV, bestD};
}

long long travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    vector<vector<Edge>> g(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<char> vis(N, 0), inComp(N, 0);
    vector<ll> radii;
    ll maxDiam = 0;

    for(int i=0;i<N;i++) if(!vis[i]){
        vector<int> nodes;
        stack<int> st;
        st.push(i);
        vis[i] = 1;

        while(!st.empty()){
            int v = st.top(); st.pop();
            nodes.push_back(v);
            inComp[v] = 1;
            for(auto e: g[v]){
                int u = e.to;
                if(!vis[u]){
                    vis[u] = 1;
                    st.push(u);
                }
            }
        }

        int s = nodes[0];
        auto a = farthest(s, g, nodes, inComp, nullptr);

        vector<ll> da, db;
        auto b = farthest(a.first, g, nodes, inComp, &da);
        auto c = farthest(b.first, g, nodes, inComp, &db);

        ll diam = c.second;
        maxDiam = max(maxDiam, diam);

        ll rad = (ll)4e18;
        for(int v: nodes){
            rad = min(rad, max(da[v], db[v]));
        }
        radii.push_back(rad);

        for(int v: nodes) inComp[v] = 0;
    }

    sort(radii.begin(), radii.end(), greater<ll>());

    ll ans = maxDiam;
    if((int)radii.size() >= 2) ans = max(ans, radii[0] + (ll)L + radii[1]);
    if((int)radii.size() >= 3) ans = max(ans, radii[1] + 2LL*(ll)L + radii[2]);
    return ans;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccoqpnCk.o: in function `main':
grader.c:(.text.startup+0xc5): undefined reference to `travelTime'
collect2: error: ld returned 1 exit status