Submission #1283542

#TimeUsernameProblemLanguageResultExecution timeMemory
1283542DeltaStructDreaming (IOI13_dreaming)C++20
0 / 100
35 ms12888 KiB
#include <bits/stdc++.h>
using namespace std;
#include "dreaming.h"

int travelTime(int n,int m,int q,int EA[],int EB[],int ET[]){
  vector<vector<pair<int,int>>> G(n); for (int i(0);i < m;++i){
    G[EA[i]].emplace_back(EB[i],ET[i]),G[EB[i]].emplace_back(EA[i],ET[i]);
  }
  vector<int> dist0(n),dist1(n),A,vis(n,1);
  auto dfs0 = [&](auto& dfs,int x,int p,int d) -> pair<int,int> {
    pair<int,int> ret(d,x);
    A.emplace_back(x),vis[x] = 0;
    for (auto [y,z]:G[x]) if (y!=p) ret = max(ret,dfs(dfs,y,x,d+z));
    return ret;
  };
  auto dfs1 = [&](auto& dfs,int x,int p,int d,vector<int>& dist) -> pair<int,int> {
    pair<int,int> ret(d,x); dist[x] = d;
    for (auto [y,z]:G[x]) if (y!=p) ret = max(ret,dfs(dfs,y,x,d+z,dist));
    return ret;
  };
  vector<int> R;
  for (int i(0);i < n;++i) if (vis[i]){
    int x = dfs0(dfs0,i,-1,0).second,y = dfs1(dfs1,x,-1,0,dist0).second;
    dfs1(dfs1,y,-1,0,dist1);
    R.emplace_back(1e9);
    for (int k:A) R.back() = min(R.back(),max(dist0[k],dist1[k]));
    A.clear();
  }
  sort(R.begin(),R.end(),greater<int>());
  return R[0]+(R.size()==1?0:R[1]+q);
}
#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...