# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1129037 | pcheloveks | Toll (BOI17_toll) | C++17 | 3094 ms | 6032 KiB |
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("avx,avx2,tune=native")
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <fstream>
#include <algorithm>
#include <cstring> // Для memset
#define endl '\n'
using namespace std;
typedef long long LL;
typedef pair<LL, LL> pii;
const LL DIM = 50007;
const LL INF = 999999999999;
LL n, k, o, m, v1, v2, t;
class edge {
public:
LL to, w;
edge(LL to_, LL w_) {
to = to_;
w = w_;
}
};
vector < edge > v[DIM];
class tran {
public:
LL mat[5][5];
void init() {
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
mat[i][j] = INF;
}
}
}
};
tran solve(LL L, LL R) {
tran ans;
ans.init();
if (R - L == 1) {
for (int i = 0; i < k; i++) {
LL val = L * k + i;
for (auto to : v[val]) {
ans.mat[i][to.to - (R * k)] = to.w;
}
}
return ans;
}
LL mid = (L + R) / 2;
tran m1 = solve(L, mid);
tran m2 = solve(mid, R);
for (int l = 0; l < k; l++) {
for (int r = 0; r < k; r++) {
for (int m = 0; m < k; m++) {
ans.mat[l][r] = min(ans.mat[l][r], m1.mat[l][m] + m2.mat[m][r]);
}
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
scanf("%lld %lld %lld %lld", &k, &n, &m, &o);
for (int i = 1; i <= m; i++) {
scanf("%lld %lld %lld", &v1, &v2, &t);
v[v1].push_back({ v2, t });
}
vector<LL> out;
for (int i = 1; i <= o; i++) {
scanf("%lld %lld", &v1, &v2);
LL b1 = v1 / k;
LL b2 = v2 / k;
if (b1 >= b2 || m == 0) {
out.push_back(-1);
}
else {
tran res = solve(b1, b2);
LL result = res.mat[v1 - b1 * k][v2 - b2 * k];
if (result >= INF) out.push_back(-1);
else out.push_back(result);
}
}
for (auto x : out) {
printf("%lld\n", x);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |