#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, int* l, 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
/usr/bin/ld: /tmp/cclM5osQ.o: in function `main':
grader.cpp:(.text.startup+0x124): undefined reference to `find_shortcut(int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, int)'
collect2: error: ld returned 1 exit status