Submission #76625

#TimeUsernameProblemLanguageResultExecution timeMemory
76625Bodo171Dreaming (IOI13_dreaming)C++14
100 / 100
117 ms11772 KiB
#include "dreaming.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int nmax=100005;
vector< pair<int,int> > v[nmax];
vector<int> centr;
int d[nmax],viz[nmax],rep[nmax],dist[nmax];
int far,root,n,nr,i,x,mx,mn,ans,maxdiam;
void dfs(int x)
{
    int nod=0;
    viz[x]=1;rep[++nr]=x;
    for(int i=0;i<v[x].size();i++)
    {
        nod=v[x][i].first;
        if(!viz[nod])
        {
            d[nod]=d[x]+v[x][i].second;
            dfs(nod);
        }
    }
}
void get_diam()
{
    far=root;nr=0;
    dfs(root);
    for(i=1;i<=nr;i++)
    {
        x=rep[i];
        if(d[x]>d[far])
            far=x;
        viz[x]=0;
    }
    nr=0;d[far]=0;
    dfs(far);
    for(i=1;i<=nr;i++)
    {
        x=rep[i];
        if(d[x]>d[far])
            far=x;
        dist[x]=max(dist[x],d[x]);
        if(d[x]>maxdiam)
            maxdiam=d[x];
        viz[x]=0;
    }
    d[far]=0;nr=0;
    dfs(far);
    for(i=1;i<=nr;i++)
    {
        x=rep[i];
        dist[x]=max(dist[x],d[x]);
    }
    mn=(1<<30);
    for(i=1;i<=nr;i++)
    {
        x=rep[i];
        if(dist[x]<mn)
            mn=dist[x];
    }
    centr.push_back(mn);
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    n=N;
    for(i=0;i<M;i++)
    {
        v[A[i]].push_back({B[i],T[i]});
        v[B[i]].push_back({A[i],T[i]});
    }
    for(root=0;root<n;root++)
        if(!viz[root])
            get_diam();
    sort(centr.begin(),centr.end());
    if(centr.size()==1)
    {
        ans=maxdiam;
    }
    if(centr.size()==2)
    {
        ans=centr[0]+centr[1]+L;
    }
    if(centr.size()>2)
    {
        x=centr.size();
        ans=max(centr[x-1]+L+centr[x-2],centr[x-2]+2*L+centr[x-3]);
    }
    return max(ans,maxdiam);
}

Compilation message (stderr)

dreaming.cpp: In function 'void dfs(int)':
dreaming.cpp:15:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<v[x].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...