Submission #726065

#TimeUsernameProblemLanguageResultExecution timeMemory
726065sofija6Dreaming (IOI13_dreaming)C++14
100 / 100
185 ms17096 KiB
#include <bits/stdc++.h>
#include "dreaming.h"
#define MAXN 100010
using namespace std;
vector<pair<int,int> > G[MAXN];
bool V[MAXN];
int maxx=0,cur,cnt[MAXN],ans=0;
vector<pair<int,int> > dist,v;
void DFS_Diameter(int i,int p,int d)
{
    V[i]=true;
    if (d>=maxx)
    {
        maxx=d;
        cur=i;
    }
    for (auto next : G[i])
    {
        if (next.first!=p)
            DFS_Diameter(next.first,i,d+next.second);
    }
}
void DFS_Distances(int i,int p,int d)
{
    dist.push_back({d,i});
    for (auto next : G[i])
    {
        if (next.first!=p)
            DFS_Distances(next.first,i,d+next.second);
    }
}
int travelTime(int N, int M, int L, int A[], int B[], int T[])
{
    for (int i=0;i<M;i++)
    {
        G[A[i]].push_back({B[i],T[i]});
        G[B[i]].push_back({A[i],T[i]});
    }
    for (int i=0;i<N;i++)
    {
        if (!V[i])
        {
            int a=i,b=i;
            DFS_Diameter(i,i,0);
            a=cur;
            maxx=0;
            DFS_Diameter(a,a,0);
            b=cur;
            maxx=0;
            dist.clear();
            DFS_Distances(a,a,0);
            DFS_Distances(b,b,0);
            sort(dist.begin(),dist.end());
            for (auto x : dist)
            {
                cnt[x.second]++;
                if (cnt[x.second]==2)
                {
                    v.push_back(x);
                    break;
                }
            }
        }
    }
    sort(v.begin(),v.end());
    for (int i=0;i<v.size()-1;i++)
    {
        G[v[v.size()-1].second].push_back({v[i].second,L});
        G[v[i].second].push_back({v[v.size()-1].second,L});
    }
    DFS_Diameter(0,0,0);
    DFS_Diameter(cur,cur,0);
    return maxx;
}

Compilation message (stderr)

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:66:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for (int i=0;i<v.size()-1;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...