Submission #1243827

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

const int mxN = 1e5 + 100;
const int INF = 2e9;

vector<pair<int,int>> adj[mxN];
int down_dp[mxN], up_dp[mxN];
bool vis[mxN];
int cmax = 0;

void dfs(int u, int p){
    vis[u] = 1;
   // cout << u << " ";
    for(auto it : adj[u]){
        if(it.first ^ p){
            dfs(it.first, u);
            down_dp[u] = max(down_dp[u], down_dp[it.first] + it.second);
        }
    }
}

void reroot(int u, int p){
    pair<int, int> mx1, mx2;
    mx1.first = mx2.first = mx2.second = -1;

    for(auto it : adj[u]){
        if(it.first ^ p){
            if(mx1.first == -1){
                mx1.first = it.first;
                mx1.second = down_dp[it.first] + it.second;
            }else if(down_dp[it.first] + it.second >= mx1.second){
                swap(mx1, mx2);
                mx1.first = it.first;
                mx1.second = down_dp[it.first] + it.second;
            }else if(down_dp[it.first] + it.second > mx2.second){
                mx2.first = it.first;
                mx2.second = down_dp[it.first] + it.second;
            }
        }
    }

    for(auto it : adj[u]){
        if(it.first ^ p){
            if(it.first == mx1.first){
                if(mx2.first != -1){
                    up_dp[it.first] = mx2.second + it.second;
                }
            }else if(mx1.first != 1){
                up_dp[it.first] = mx1.second + it.second;
            }
            up_dp[it.first] = max(up_dp[it.first], up_dp[u] + it.second);
            reroot(it.first, u);
        }
    }
    cmax = min(cmax, max(up_dp[u], down_dp[u]));
}

int main(){
    int n, m, l, u, v, w;
    cin >> n >> m >> l;
    for(int i = 0; i < m; ++i){
        cin >> u >> v >> w;
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }
    vector<int> tokens;
    for(int i = 0; i < n; ++i){
        if(!vis[i]){
            cmax = INF;
        //    cout << "started visiting:- ";
            dfs(i, -1);
            reroot(i, -1);
          //  cout << "ended visiting\n";
            tokens.push_back(cmax);
           // cout << i << " " << cmax << endl;
        }
    }

    sort(tokens.begin(), tokens.end());

  //  cout << "2 updp : " << up_dp[2] << " downdp: " << down_dp[2] << endl;

    if(tokens.size() == 1){
        cout << tokens.back() << "\n";
    }else{
        cout << tokens[tokens.size() - 2] + l + tokens.back() << "\n";
    }

    return 0;
}

Compilation message (stderr)

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