제출 #1354097

#제출 시각아이디문제언어결과실행 시간메모리
1354097minhanhphan555꿈 (IOI13_dreaming)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std ;

#define endl '\n'
#define pb push_back
#define REP(i , n) for(int i = 0 , _n = (n) ; i < _n ; ++i)

#define MAXN 100005

vector <pair <int , int>> adj[MAXN + 1] ;
int numNode , numEdge , f[MAXN + 1] , g[MAXN + 1] ;

bool vis[MAXN + 1] ;

void dfs(int u , int par) {
    vis[u] = true ;
    for(pair <int , int> it : adj[u]) {
        int v = it.first , w = it.second ;
        if(v == par) continue ;
        dfs(v , u) ;
        f[u] = max(f[u] , f[v] + w) ;
    }
}

int minOfMaxDist , res = 0 ;

void down(int u , int par) {
    res = max(res , max( f[u] , g[u] )) ;
    minOfMaxDist = min(minOfMaxDist , max( g[u] , f[u] )) ;
    int sz = (int) adj[u].size() ;
    if(sz == 0) return ;

    vector <int> pre(sz + 1) , suff(sz + 2) ;
    if(adj[u][0].first != par) pre[0] = f[ adj[u][0].first ] + adj[u][0].second ;
    if(adj[u][sz - 1].first != par) suff[sz - 1] = f[ adj[u][sz - 1].first ] + adj[u][sz - 1].second ;

    for(int i = 1 ; i < sz ; ++i) pre[i] = (adj[u][i].first == par ? pre[i - 1] : max(pre[i - 1] , f[ adj[u][i].first ] + adj[u][i].second ) ) ;
    for(int i = sz - 1 ; i >= 0 ; --i) suff[i] = (adj[u][i].first == par ? suff[i + 1] : max( suff[i + 1] , f[ adj[u][i].first ] + adj[u][i].second )) ;

    REP(i , sz) {
        int v = adj[u][i].first , w = adj[u][i].second ;
        if(v == par) continue ;

        g[v] = g[u] + w ;

        int cost = 0 ;
        if(i == 0) cost = suff[i + 1] ;
        else if(i == sz - 1) {
            if(i == 0) cost = 0 ;
            else cost = pre[i - 1] ;
        }
        else cost = max(pre[i - 1] , suff[i + 1]) ;

        g[v] = max(g[v] , cost + w) ;
        down(v , u) ;
    }

}


int main(void) {
    ios_base::sync_with_stdio(false) ;
    cout.tie(nullptr) ;
    cin.tie(nullptr) ;

    int l ;
    cin >> numNode >> numEdge >> l ;
    REP(faker , numEdge) {
        int u , v , w ; cin >> u >> v >> w ;
        adj[u].pb({v , w}) ; adj[v].pb({u , w}) ;
    }

    vector <int> tmp ;

    for(int i = 0 ; i < numNode ; ++i) if(vis[i] == false) {
        minOfMaxDist = (int) 1e9 + 36 ;

        dfs(i , -1) ;
        down(i , -1) ;

        tmp.pb(minOfMaxDist) ;
    }

    sort(tmp.begin() , tmp.end() , greater <int> ()) ;

    if((int) tmp.size() == 1) cout << res << endl ;
    else if((int) tmp.size() == 2) cout << max(res , tmp[0] + tmp[1] + l) << endl ;
    else cout << max(res , max( tmp[0] + tmp[1] + l , tmp[1] + tmp[2] + 2 * l ) ) ;

    return 0 ;
}

컴파일 시 표준 에러 (stderr) 메시지

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