Submission #589804

# Submission time Handle Problem Language Result Execution time Memory
589804 2022-07-05T09:43:27 Z Sam_a17 Shortcut (IOI16_shortcut) C++14
Compilation error
0 ms 0 KB
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include "shortcut_c.h"
#include <cstdio>
using namespace std;
#define ll long long

const int N = 3e3 + 10;
const ll inf = 1e16;
long long maxLeft[N], maxRight[N];
long long maxLeftDiam[N], maxRightDiam[N];
vector<pair<int, long long>> adj[N];
int ni;

pair<long long, long long> djik(int node) {
  vector<bool> used(ni + 1);
  vector<long long> dist(ni + 1, inf);
  priority_queue<pair<ll, ll>, vector<pair<ll, ll>> , greater<pair<ll, ll>> > q;
  dist[node] = 0;
  q.push({0, node});
 
  while(!q.empty()) {
    auto u = q.top();
    q.pop();

    if(used[u.second]) {
      continue;
    }
    used[u.second] = true;

    for(auto i: adj[u.second]) {
      if(dist[i.first] > dist[u.second] + i.second) {
        dist[i.first] = dist[u.second] + i.second;
        q.push({dist[i.first], i.first});
      }
    }
  }

  pair<ll, ll> answ = {-1, -1};

  for(int i = 0; i < ni; i++) {
    if(dist[i] > answ.first) {
      answ = {dist[i], i};
    }
  }

  return answ;
}

long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c)
  ni = n;


  if(d[0]) {
    adj[0].push_back({ni, d[0]});
    adj[ni++].push_back({0, d[0]});
  }

  for(int i = 1; i < n; i++) {
    adj[i - 1].push_back({i, l[i - 1]});
    adj[i].push_back({i - 1, l[i - 1]});

    if(d[i]) {
      adj[i].push_back({ni, d[i]});
      adj[ni++].push_back({i, d[i]});
    }
  }

  long long minDiametr = INT64_MAX;
  for(int i = 0; i < n; i++) {
    for(int j = i + 1; j < n; j++) {
      adj[i].push_back({j, (long long)c});
      adj[j].push_back({i, (long long)c});

      long long maxi = INT64_MIN;
      for(int k = 0; k < ni; k++) {
        maxi = max(maxi, djik(k).first);
      }

      minDiametr = min(maxi, minDiametr);

      adj[i].erase(find(adj[i].begin(), adj[i].end(), make_pair(j, (ll)c)));
      adj[j].erase(find(adj[j].begin(), adj[j].end(), make_pair(i, (ll)c)));
    }
  }

  return minDiametr;
}

Compilation message

shortcut.cpp:51:3: error: expected initializer before 'ni'
   51 |   ni = n;
      |   ^~
shortcut.cpp:54:3: error: expected unqualified-id before 'if'
   54 |   if(d[0]) {
      |   ^~
shortcut.cpp:59:3: error: expected unqualified-id before 'for'
   59 |   for(int i = 1; i < n; i++) {
      |   ^~~
shortcut.cpp:59:18: error: 'i' does not name a type; did you mean 'ni'?
   59 |   for(int i = 1; i < n; i++) {
      |                  ^
      |                  ni
shortcut.cpp:59:25: error: 'i' does not name a type; did you mean 'ni'?
   59 |   for(int i = 1; i < n; i++) {
      |                         ^
      |                         ni
shortcut.cpp:70:3: error: expected unqualified-id before 'for'
   70 |   for(int i = 0; i < n; i++) {
      |   ^~~
shortcut.cpp:70:18: error: 'i' does not name a type; did you mean 'ni'?
   70 |   for(int i = 0; i < n; i++) {
      |                  ^
      |                  ni
shortcut.cpp:70:25: error: 'i' does not name a type; did you mean 'ni'?
   70 |   for(int i = 0; i < n; i++) {
      |                         ^
      |                         ni
shortcut.cpp:87:3: error: expected unqualified-id before 'return'
   87 |   return minDiametr;
      |   ^~~~~~
shortcut.cpp:88:1: error: expected declaration before '}' token
   88 | }
      | ^