답안 #940241

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
940241 2024-03-07T06:56:28 Z vjudge1 꿈 (IOI13_dreaming) C++17
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
const int B = 1e5 + 100;
const int INF = 1e9 + 10000000;
vector <pair <int,int> > reb[B];
multiset <int> s[B];
vector <int> g;
bool was[B];
int mx1[B];
int mx2[B];
pair <int,int> now = {INF,0};
int pred[B];
int parent(int v) {
    return pred[v];
}
int mn[B];
int mxlen;
void precalc(int v,int strt) {
    was[v] = true;
    pred[v] = strt;
    g.push_back(v);
    for(auto u:reb[v]) {
        if(was[u.f]) continue;
        precalc(u.f,strt); 
        int rast = u.s + mx1[u.f];
        if(rast > mx1[v]) {
            mx2[v] = mx1[v];
            mx1[v] = rast;
        }
        else if(rast > mx2[v]) {
            mx2[v] = rast;
        }
    }
}
int dp[B];
void dfs(int v) {
    now = min(now,{mx1[v],v});
    was[v] = true;
    vector <pair <int,int> > q;
    s[v].insert(0);
    for(auto u:reb[v]) {
        if(was[u.f]) continue;
        s[v].insert(mx1[u.f] + u.s);
        q.push_back(u);
    }
    for(auto u:q) {
        if(was[u.f]) continue;
        s[v].erase(s[v].find(mx1[u.f] + u.s));
        int rast = *--s[v].end() + u.s;
        s[u.f].insert(*--s[v].end() + u.s);
        s[v].insert(mx1[u.f] + u.s);
        if(rast > mx1[u.f]) {
            mx2[u.f] = mx1[u.f];
            mx1[u.f] = rast;
        }
        else if(rast > mx2[u.f]) {
            mx2[u.f] = rast;
        }
        dfs(u.f);
    }
}
void check(int v) {
    precalc(v,v);
    for(auto x:g) was[x] = false;
    dfs(v);
    g.clear();
    mn[parent(now.s)] = now.f;
    now = {INF,0};
}
multiset <int> nows;
int solve(int v,int L) {
    nows.erase(nows.find(mn[parent(v)]));
    vector <int> x = {*--nows.end() + L,*----nows.end() + L,mx1[v],mx2[v]};
    sort(x.begin(),x.end());
    nows.insert(mn[parent(v)]);
    return x[3] + x[2];
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    int n = N,m = M;
    for(int i = 0;i < m;i++) {
        reb[A[i] + 1].push_back({B[i] + 1,T[i]});
        reb[B[i] + 1].push_back({A[i] + 1,T[i]});
    } 
    for(int i = 1;i <= n;i++) {
        if(!was[i]) check(i);
    }
    nows.insert(-INF);
    nows.insert(-INF);
    nows.insert(-INF);
    nows.insert(-INF);
    for(int i = 1;i <= n;i++) {
        if(parent(i) == i) {
            nows.insert(mn[i]);
        }
    }
    //cout << "Start: ";
    //for(auto x:nows) cout << x << " ";
    //cout << endl;
    for(int i = 1;i <= n;i++) mxlen = max(mxlen,mx1[i]);
    int ans = INF;
    for(int i = 1;i <= n;i++) {
        ans = min(ans,solve(i,L));
    }
    return max(ans,mxlen);
};
/*
signed main() {
    ios_base::sync_with_stdio(NULL);
    cin.tie(0);
    cout.tie(0);
    int n,m,l;
    cin >> n >> m >> l;
    int a[m],b[m],t[m];
    for(int i = 0;i < m;i++) cin >> a[i] >> b[i] >> t[i];
    cout << travelTime(n,m,l,a,b,t);
}
*/

Compilation message

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