Submission #515998

#TimeUsernameProblemLanguageResultExecution timeMemory
515998600MihneaDreaming (IOI13_dreaming)C++17
100 / 100
91 ms24824 KiB
#include "dreaming.h"
#include <bits/stdc++.h>

using namespace std;


int travelTime(int n, int m, int l, int edge_a[], int edge_b[], int edge_c[]) {
  vector<vector<pair<int, int>>> g(n);
  for (int i = 0; i < m; i++) {
    g[edge_a[i]].push_back({edge_b[i], edge_c[i]});
    g[edge_b[i]].push_back({edge_a[i], edge_c[i]});
  }

  vector<int> dep(n, 0), up(n, 0);
  vector<bool> vis(n, 0);

  int cur_diam, cur_mx_dist;

  function<void(int)> dfs1 = [&] (int a) {

    vector<pair<int, int>> nw_g;
    vis[a] = 1;
    for (auto &it : g[a]) {
      int b = it.first, c = it.second;
      if (!vis[b]) {
        nw_g.push_back(it);
        dfs1(b);
        cur_diam = max(cur_diam, dep[a] + dep[b] + c);
        dep[a] = max(dep[a], dep[b] + c);
      }
    }
    g[a] = nw_g;
  };

  function<void(int)> dfs2 = [&] (int a) {
    cur_mx_dist = min(cur_mx_dist, max(up[a], dep[a]));
    for (int S = 0; S < 2; S++) {
      int R = 0;
      for (auto &it : g[a]) {
        int b = it.first, c = it.second;
        up[b] = max(up[b], up[a] + c);
        up[b] = max(up[b], R + c);
        R = max(R, dep[b] + c);
      }
      reverse(g[a].begin(), g[a].end());
    }
    for (auto &it : g[a]) {
      int b = it.first, c = it.second;
      dfs2(b);
    }
  };

  vector<int> guys;

  int sol = 0;

  for (int r = 0; r < n; r++) {
    if (!vis[r]) {
      cur_diam = 0;
      cur_mx_dist = (int) 1e9 + 7;
      dfs1(r);
      dfs2(r);
      guys.push_back(cur_mx_dist);
      sol = max(sol, cur_diam);
    }
  }
  sort(guys.rbegin(), guys.rend());
  if ((int) guys.size() >= 2) {
    sol = max(sol, guys[0] + guys[1] + l);
  }
  if ((int) guys.size() >= 3) {
    sol = max(sol, guys[1] + guys[2] + 2 * l);
  }
  return sol;
}

Compilation message (stderr)

dreaming.cpp: In lambda function:
dreaming.cpp:48:25: warning: unused variable 'c' [-Wunused-variable]
   48 |       int b = it.first, c = it.second;
      |                         ^
#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...