Submission #1318356

#TimeUsernameProblemLanguageResultExecution timeMemory
1318356ayazDreaming (IOI13_dreaming)C++20
0 / 100
35 ms14976 KiB
#include "bits/stdc++.h"
#include <algorithm>
#include "dreaming.h"

using namespace std;

vector<vector<array<int, 2>>> g;
vector<bool> used;
vector<int> dis, nodes, path;
int n;
void dfs(int u, int p = -1) {
  used[u] = 1;
  nodes.push_back(u);
  for (auto &[v, w] : g[u]) {
    if (v == p) continue;
    dis[v] = dis[u] + w;
    dfs(v, u);
  }
}
bool findPath(int u, int tar, int p = -1) {
  path.push_back(u);
  if (u == tar) return true;
  for (auto &[v, w] : g[u]) {
    if (v == p) continue;
    if (findPath(v, tar, u)) return true;
  }
  path.pop_back();
  return false;
}
int findCenter(int u) {
  nodes.clear();
  dis[u] = 0;
  dfs(u);
  int s = 0;
  for (auto &i : nodes)
    if (dis[i] > dis[s]) s = i;
  int start = s;
  nodes.clear();
  dis[s] = 0;
  dfs(s);
  int f = 0;
  for (auto &i : nodes)
    if (dis[i] > dis[f]) f = i;
  path.clear();
  findPath(s, f);
  int len = (int)path.size();
  int cent = max(dis[path[len / 2]], dis[path[(len - 1) / 2]]);
  return cent;
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
  int m = M, l = L;
  n = N;
  dis.resize(n + 1);
  g.resize(n + 1);
  used.assign(n + 1, false);
  for (int i = 0; i < m; i++) {
    int u = A[i], v = B[i], w = T[i];
    u++, v++;
    g[u].push_back({v, w});
    g[v].push_back({u, w});
  }
  vector<int> mx;
  for (int u = 1; u <= n; u++) {
    if (used[u]) continue;
    mx.push_back(findCenter(u));
  }
  sort(mx.rbegin(), mx.rend());
  if (int(mx.size()) <= 2) return mx[0] + mx[1] + l;
  return max(mx[1] + mx[2] + 2 * l, mx[0] + mx[1] + l);
}
#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...