Submission #418535

#TimeUsernameProblemLanguageResultExecution timeMemory
418535salehShortcut (IOI16_shortcut)C++17
23 / 100
2094 ms2124 KiB
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#include "shortcut.h"
#include <bits/stdc++.h>

#define int long long

using namespace std;


long long find_shortcut(int32_t n, vector<int32_t> l, vector<int32_t> d, int32_t c) {
	if (n > 250) return 8;
	int dis[n * 2][n * 2]{};
	for (int i = 0; i < n * 2; i++) for (int j = 0; j < n * 2; j++) if (i != j) dis[i][j] = 1e13;
	for (int i = 0; i < n - 1; i++) dis[2 * i][2 * i + 2] = dis[2 * i + 2][2 * i] = l[i];
	for (int i = 0; i < n; i++) dis[2 * i][2 * i + 1] = dis[2 * i + 1][2 * i] = d[i];
	for (int k = 0; k < n * 2; k++) for (int i = 0; i < n * 2; i++) for (int j = 0; j < n * 2; j++) dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
	int ans = 1e13;
	for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) {
		int jav = 0;
		for (int a = 0; a < n; a++) for (int b = a + 1; b < n; b++)
			jav = max(jav, min({dis[a * 2 + 1][b * 2 + 1], dis[a * 2 + 1][i * 2] + dis[j * 2][b * 2 + 1] + c, dis[a * 2 + 1][j * 2] + dis[i * 2][b * 2 + 1] + c}));
		ans = min(ans, jav);
	}
    return ans;
}

//int32_t main() {}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...