/*
++[---------->+<]>.-[------>+<]>-.++++++++.+++++.-[->+++++<]>-.-[--->++<]>--.+.[--->+<]>---.[->+++<]>++.++++++.-------.++++++.--[--->+<]>.-[->+++<]>-..+++++++++++++.[----->++<]>.------------.+[----->+<]>.--------.+++++++++++++.-------------.--[--->+<]>-.---[->++++<]>-.++++[->+++<]>.--[--->+<]>-.[->+++<]>++.-.+++.---.-[->+++<]>.-[--->++<]>+.++++.------.[--->+<]>---.+[----->+<]>.------------.+++++++.-------.--[--->+<]>---.+++[->+++<]>++..+++++++++.---------.-[->+++<]>.+[----->+<]>+.-------------.+++++++.+.----[->+++<]>-.
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long big;
typedef long double ludo;
#define pbb pair<big, big>
#define pii pair<int, int>
#define fe first
#define se second
#define maxheap priority_queue
#define mset multiset
#define uset unordered_set
#define umap unordered_map
#define fr(i, s, e) for(int i = s; i < e; i++)
#define revfr(i, s, e) for(int i = s - 1; i >= e; i--)
#define getv(v, n) for(int i = 0; i < n; i++) cin >> v[i];
#define speed ios_base::sync_with_stdio(false); cin.tie(NULL)
#define nl "\n"
// #define debug(text) if(do_debug) {cout << (#text) << ": " << text << endl;}
#ifdef naman1601
#define debug(text) cout << (#text) << ": " << text << endl;
#else
#define debug(text)
#endif
const big mod = 1000000007;
// const big mod = 998244353;
const big infinity = 1000000000000000000;
const int inf = 1e9 + 5;
bool do_debug = false;
int k, n, m, o;
const int maxn = 50000 + 50;
const int maxjump = 17;
vector<vector<big>> dp[maxn][maxjump];
void combine(vector<vector<big>>& w, vector<vector<big>>& u, vector<vector<big>>& v) {
fr(i, 0, k) {
fr(j, 0, k) {
fr(l, 0, k) {
w[i][j] = min(w[i][j], u[i][l] + v[l][j]);
}
}
}
}
void solve() {
cin >> k >> n >> m >> o;
fr(i, 0, maxn) {
fr(j, 0, maxjump) {
dp[i][j] = vector<vector<big>>(5, vector<big>(5, inf));
}
}
fr(i, 0, m) {
int u, v, w;
cin >> u >> v >> w;
dp[u / k][0][u % k][v % k] = w;
}
fr(jump, 1, maxjump) {
fr(v, 0, n / k + 1) {
if((v + (1 << (jump - 1))) > (n / k + 1)) break;
combine(dp[v][jump], dp[v][jump - 1], dp[v + (1 << (jump - 1))][jump - 1]);
}
}
fr(p, 0, o) {
int u, v;
cin >> u >> v;
int x = u % k, y = v % k;
u /= k;
v /= k;
if(u == v) {
cout << -1 << nl;
continue;
}
vector<vector<big>> a(5, vector<big>(5, inf));
vector<vector<big>> b(5, vector<big>(5, inf));
fr(i, 0, 5) {
b[i][i] = 0;
}
revfr(jump, maxjump, 0) {
if(u + (1 << jump) <= v) {
combine(a, b, dp[u][jump]);
fr(i, 0, 5) {
fr(j, 0, 5) {
b[i][j] = a[i][j];
a[i][j] = inf;
}
}
u += (1 << jump);
if(u == v) break;
}
}
big r = b[x][y];
if(r < inf) {
cout << r << nl;
} else {
cout << -1 << nl;
}
}
}
int main() {
speed;
int q = 1;
// cin >> q;
while(q-- > 0) {
solve();
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
489 ms |
326652 KB |
Output is correct |
2 |
Correct |
446 ms |
326540 KB |
Output is correct |
3 |
Correct |
366 ms |
326644 KB |
Output is correct |
4 |
Correct |
375 ms |
326568 KB |
Output is correct |
5 |
Correct |
401 ms |
326680 KB |
Output is correct |
6 |
Correct |
401 ms |
326596 KB |
Output is correct |
7 |
Correct |
366 ms |
326672 KB |
Output is correct |
8 |
Correct |
489 ms |
327592 KB |
Output is correct |
9 |
Correct |
491 ms |
327448 KB |
Output is correct |
10 |
Correct |
468 ms |
326832 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
525 ms |
326644 KB |
Output is correct |
2 |
Correct |
361 ms |
326652 KB |
Output is correct |
3 |
Correct |
415 ms |
326576 KB |
Output is correct |
4 |
Correct |
367 ms |
326596 KB |
Output is correct |
5 |
Correct |
373 ms |
326580 KB |
Output is correct |
6 |
Correct |
366 ms |
326652 KB |
Output is correct |
7 |
Correct |
376 ms |
326716 KB |
Output is correct |
8 |
Correct |
366 ms |
326736 KB |
Output is correct |
9 |
Correct |
484 ms |
327512 KB |
Output is correct |
10 |
Correct |
485 ms |
329072 KB |
Output is correct |
11 |
Correct |
486 ms |
328388 KB |
Output is correct |
12 |
Correct |
465 ms |
327872 KB |
Output is correct |
13 |
Correct |
452 ms |
329044 KB |
Output is correct |
14 |
Correct |
439 ms |
328164 KB |
Output is correct |
15 |
Correct |
424 ms |
327840 KB |
Output is correct |
16 |
Correct |
423 ms |
327876 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
365 ms |
326628 KB |
Output is correct |
2 |
Correct |
362 ms |
326592 KB |
Output is correct |
3 |
Correct |
358 ms |
326560 KB |
Output is correct |
4 |
Correct |
363 ms |
326652 KB |
Output is correct |
5 |
Correct |
367 ms |
326584 KB |
Output is correct |
6 |
Correct |
382 ms |
326668 KB |
Output is correct |
7 |
Correct |
365 ms |
326684 KB |
Output is correct |
8 |
Correct |
372 ms |
326980 KB |
Output is correct |
9 |
Correct |
367 ms |
326700 KB |
Output is correct |
10 |
Correct |
461 ms |
327572 KB |
Output is correct |
11 |
Correct |
465 ms |
328172 KB |
Output is correct |
12 |
Correct |
478 ms |
328728 KB |
Output is correct |
13 |
Correct |
467 ms |
329004 KB |
Output is correct |
14 |
Correct |
461 ms |
328464 KB |
Output is correct |
15 |
Correct |
420 ms |
327852 KB |
Output is correct |
16 |
Correct |
401 ms |
327708 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
365 ms |
326628 KB |
Output is correct |
2 |
Correct |
362 ms |
326592 KB |
Output is correct |
3 |
Correct |
358 ms |
326560 KB |
Output is correct |
4 |
Correct |
363 ms |
326652 KB |
Output is correct |
5 |
Correct |
367 ms |
326584 KB |
Output is correct |
6 |
Correct |
382 ms |
326668 KB |
Output is correct |
7 |
Correct |
365 ms |
326684 KB |
Output is correct |
8 |
Correct |
372 ms |
326980 KB |
Output is correct |
9 |
Correct |
367 ms |
326700 KB |
Output is correct |
10 |
Correct |
461 ms |
327572 KB |
Output is correct |
11 |
Correct |
465 ms |
328172 KB |
Output is correct |
12 |
Correct |
478 ms |
328728 KB |
Output is correct |
13 |
Correct |
467 ms |
329004 KB |
Output is correct |
14 |
Correct |
461 ms |
328464 KB |
Output is correct |
15 |
Correct |
420 ms |
327852 KB |
Output is correct |
16 |
Correct |
401 ms |
327708 KB |
Output is correct |
17 |
Correct |
505 ms |
328328 KB |
Output is correct |
18 |
Correct |
354 ms |
326648 KB |
Output is correct |
19 |
Correct |
360 ms |
326736 KB |
Output is correct |
20 |
Correct |
364 ms |
326648 KB |
Output is correct |
21 |
Correct |
365 ms |
326532 KB |
Output is correct |
22 |
Correct |
362 ms |
326652 KB |
Output is correct |
23 |
Correct |
364 ms |
326760 KB |
Output is correct |
24 |
Correct |
362 ms |
326644 KB |
Output is correct |
25 |
Correct |
384 ms |
326724 KB |
Output is correct |
26 |
Correct |
361 ms |
326656 KB |
Output is correct |
27 |
Correct |
477 ms |
327488 KB |
Output is correct |
28 |
Correct |
477 ms |
328760 KB |
Output is correct |
29 |
Correct |
494 ms |
329184 KB |
Output is correct |
30 |
Correct |
474 ms |
328468 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
489 ms |
326652 KB |
Output is correct |
2 |
Correct |
446 ms |
326540 KB |
Output is correct |
3 |
Correct |
366 ms |
326644 KB |
Output is correct |
4 |
Correct |
375 ms |
326568 KB |
Output is correct |
5 |
Correct |
401 ms |
326680 KB |
Output is correct |
6 |
Correct |
401 ms |
326596 KB |
Output is correct |
7 |
Correct |
366 ms |
326672 KB |
Output is correct |
8 |
Correct |
489 ms |
327592 KB |
Output is correct |
9 |
Correct |
491 ms |
327448 KB |
Output is correct |
10 |
Correct |
468 ms |
326832 KB |
Output is correct |
11 |
Correct |
525 ms |
326644 KB |
Output is correct |
12 |
Correct |
361 ms |
326652 KB |
Output is correct |
13 |
Correct |
415 ms |
326576 KB |
Output is correct |
14 |
Correct |
367 ms |
326596 KB |
Output is correct |
15 |
Correct |
373 ms |
326580 KB |
Output is correct |
16 |
Correct |
366 ms |
326652 KB |
Output is correct |
17 |
Correct |
376 ms |
326716 KB |
Output is correct |
18 |
Correct |
366 ms |
326736 KB |
Output is correct |
19 |
Correct |
484 ms |
327512 KB |
Output is correct |
20 |
Correct |
485 ms |
329072 KB |
Output is correct |
21 |
Correct |
486 ms |
328388 KB |
Output is correct |
22 |
Correct |
465 ms |
327872 KB |
Output is correct |
23 |
Correct |
452 ms |
329044 KB |
Output is correct |
24 |
Correct |
439 ms |
328164 KB |
Output is correct |
25 |
Correct |
424 ms |
327840 KB |
Output is correct |
26 |
Correct |
423 ms |
327876 KB |
Output is correct |
27 |
Correct |
365 ms |
326628 KB |
Output is correct |
28 |
Correct |
362 ms |
326592 KB |
Output is correct |
29 |
Correct |
358 ms |
326560 KB |
Output is correct |
30 |
Correct |
363 ms |
326652 KB |
Output is correct |
31 |
Correct |
367 ms |
326584 KB |
Output is correct |
32 |
Correct |
382 ms |
326668 KB |
Output is correct |
33 |
Correct |
365 ms |
326684 KB |
Output is correct |
34 |
Correct |
372 ms |
326980 KB |
Output is correct |
35 |
Correct |
367 ms |
326700 KB |
Output is correct |
36 |
Correct |
461 ms |
327572 KB |
Output is correct |
37 |
Correct |
465 ms |
328172 KB |
Output is correct |
38 |
Correct |
478 ms |
328728 KB |
Output is correct |
39 |
Correct |
467 ms |
329004 KB |
Output is correct |
40 |
Correct |
461 ms |
328464 KB |
Output is correct |
41 |
Correct |
420 ms |
327852 KB |
Output is correct |
42 |
Correct |
401 ms |
327708 KB |
Output is correct |
43 |
Correct |
505 ms |
328328 KB |
Output is correct |
44 |
Correct |
354 ms |
326648 KB |
Output is correct |
45 |
Correct |
360 ms |
326736 KB |
Output is correct |
46 |
Correct |
364 ms |
326648 KB |
Output is correct |
47 |
Correct |
365 ms |
326532 KB |
Output is correct |
48 |
Correct |
362 ms |
326652 KB |
Output is correct |
49 |
Correct |
364 ms |
326760 KB |
Output is correct |
50 |
Correct |
362 ms |
326644 KB |
Output is correct |
51 |
Correct |
384 ms |
326724 KB |
Output is correct |
52 |
Correct |
361 ms |
326656 KB |
Output is correct |
53 |
Correct |
477 ms |
327488 KB |
Output is correct |
54 |
Correct |
477 ms |
328760 KB |
Output is correct |
55 |
Correct |
494 ms |
329184 KB |
Output is correct |
56 |
Correct |
474 ms |
328468 KB |
Output is correct |
57 |
Correct |
530 ms |
329940 KB |
Output is correct |
58 |
Correct |
497 ms |
327592 KB |
Output is correct |
59 |
Correct |
529 ms |
328640 KB |
Output is correct |