Submission #452148

#TimeUsernameProblemLanguageResultExecution timeMemory
452148FEDIKUSDreaming (IOI13_dreaming)C++17
100 / 100
128 ms18756 KiB
#include "dreaming.h"

#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define xx first
#define yy second

using namespace std;

typedef pair<int,int> pii;

const int maxn=1e5+10;

bool bio[maxn];
int dist[maxn];
int dp[maxn];
vector<pii> g[maxn];

void dfs1(int cvor){
    if(bio[cvor]) return;
    bio[cvor]=true;
    dp[cvor]=0;
    for(pii i:g[cvor]){
        if(bio[i.xx]) continue;
        dfs1(i.xx);
        dp[cvor]=max(dp[cvor],dp[i.xx]+i.yy);
    }
}

pii dfs2(int cvor,int prosli){
    pii ret={dp[cvor],cvor};
    int maxi=0;
    int maxi2=0;
    for(pii i:g[cvor]){
        if(dp[i.xx]+i.yy>=maxi){
            maxi2=maxi;
            maxi=dp[i.xx]+i.yy;
        }else if(dp[i.xx]+i.yy>maxi2){
            maxi2=dp[i.xx]+i.yy;
        }
    }
    for(pii i:g[cvor]){
        if(i.xx==prosli) continue;
        int bc=dp[cvor];
        int bi=dp[i.xx];
        int vr=dp[i.xx]+i.yy;
        if(vr==maxi) dp[cvor]=maxi2;
        dp[i.xx]=max(dp[i.xx],dp[cvor]+i.yy);
        ret=min(ret,dfs2(i.xx,cvor));
        dp[cvor]=bc;
        dp[i.xx]=bi;
    }
    return ret;
}

pii najd(int cvor,int prosli){
    pii ret=mp(0,cvor);
    for(pii i:g[cvor]){
        if(i.xx==prosli) continue;
        pii pom=najd(i.xx,cvor);
        pom.xx+=i.yy;
        ret=max(ret,pom);
    }
    return ret;
}

int odg(int cvor){
    return najd(najd(cvor,-1).yy,-1).xx;
}

int travelTime(int n,int m,int l,int a[],int b[],int t[]) {
    for(int i=0;i<n;i++) dist[i]=-1;
    for(int i=0;i<m;i++){
        g[a[i]].pb(mp(b[i],t[i]));
        g[b[i]].pb(mp(a[i],t[i]));
    }
    vector<pii> kurac;
    for(int i=0;i<n;i++){
        if(bio[i]) continue;
        dfs1(i);
        kurac.pb(dfs2(i,-1));
    }
    sort(kurac.begin(),kurac.end(),greater<pii>());
    for(int i=1;i<kurac.size();i++){
        g[kurac[0].yy].pb(mp(kurac[i].yy,l));
        g[kurac[i].yy].pb(mp(kurac[0].yy,l));
    }
    return odg(0);
}

Compilation message (stderr)

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:85:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |     for(int i=1;i<kurac.size();i++){
      |                 ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...