답안 #223619

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
223619 2020-04-15T20:06:49 Z a_player 꿈 (IOI13_dreaming) C++14
0 / 100
56 ms 21112 KB
#include <bits/stdc++.h>
#include "dreaming.h"
#define f first
#define s second

using namespace std;

const int nax=1e5+5;
struct node{
    int a,b,p;
};
vector<pair<int,int> > grafo[nax];
node dp[nax];
bitset<nax> v;
int mini=INT_MAX,pos;
int diam=0;
node max3(node a, int b, int pos){
    if(b>=a.a)return {b,a.a,pos};
    if(b>a.b) return {a.a,b,a.p};
    return a;
}

int dfsb(int n, int a){
    v[n]=1;
    for(auto x:grafo[n]){
        if(x.f==a)continue;
        dp[n]=max3(dp[n],dfsb(x.f,n)+x.s,x.f);
    }
    diam=max(diam,dp[n].a+dp[n].b);
    return dp[n].a;
}
void dfst(int n, int a, int d){
        if(max(d,dp[n].a)<mini){
            mini=max(d,dp[n].a);
            pos=n;
        }
        for(auto x:grafo[n]){
            if(x.f==a)continue;
            int dd=max(d,(x.f!=dp[n].p?dp[n].a:dp[n].b))+x.s;
            dfst(x.f,n,dd);
        }
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]){
    for(int i=0;i<M;i++){
        grafo[A[i]-1].push_back({B[i]-1,T[i]});
        grafo[B[i]-1].push_back({A[i]-1,T[i]});
    }
    vector<int> maxes;
    for(int i=0;i<N;i++){
        if(!v[i]){
            dfsb(i,-1);
            dfst(i,-1,0);
            maxes.push_back(mini);
        }
    }
    sort(maxes.begin(),maxes.end(),greater<int>());
    int ans=diam;
    if(maxes.size()>1)ans=max(ans,maxes[0]+maxes[1]+L);
    if(maxes.size()>2)ans=max(ans,maxes[1]+maxes[2]+2*L);
    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 56 ms 21112 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 56 ms 21112 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 56 ms 21112 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 27 ms 6888 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 56 ms 21112 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 56 ms 21112 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -