QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#81895 | #1274. Walking Plan | 12345678 | AC ✓ | 441ms | 14816kb | C++14 | 2.6kb | 2023-02-26 17:26:11 | 2023-02-26 17:26:12 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mp make_pair
#define inf 1e9
#define pii pair <int, int>
const int mod = 1e9 + 7;
char buf[1 << 21], *p1 = buf, *p2 = buf;
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 18, stdin), p1 == p2) ? EOF : *p1++)
inline int read () {
int x = 0, f = 1;
char ch = getchar ();
while (ch < '0' || ch > '9') f = ((ch == '-') ? -1 : f), ch = getchar ();
while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar ();
return x * f;
}
inline void write (int x) {
if (x < 0) x = -x, putchar ('-');
if (x >= 10) write (x / 10);
putchar (x % 10 + '0');
}
inline int quickmod (int x, int y) {
int Ans = 1;
while (y) {
if (y & 1) Ans = (1ll * Ans * x) % mod;
x = (1ll * x * x) % mod;
y >>= 1;
}
return Ans;
}
inline void Add(int &x, int y) {
x += y;
if(x >= mod) x -= mod;
}
inline void Dec(int &x, int y) {
x -= y;
if(x < 0) x += mod;
}
inline int add(int x, int y) {
x += y;
if(x >= mod) x -= mod;
return x;
}
inline int dec(int x, int y) {
x -= y;
if(x < 0) x += mod;
return x;
}
int n, m, Q;
int w[55][55];
int f[205][55][55], g[205][55][55];
signed main () {
// freopen (".in", "r", stdin);
// freopen (".out", "w", stdout);
int T = read();
while(T--) {
n = read(), m = read();
for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) w[i][j] = inf;
for(int t = 0; t <= 200; t++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) f[t][i][j] = g[t][i][j] = inf;
for(int i = 1; i <= n; i++) f[0][i][i] = g[0][i][i] = 0;
for(int i = 1; i <= m; i++) {
int u = read(), v = read(), e = read();
w[u][v] = min(w[u][v], e);
}
for(int t = 1; t <= 200; t++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) for(int k = 1; k <= n; k++) f[t][i][j] = min(f[t][i][j], f[t-1][i][k] + w[k][j]);
for(int t = 1; t <= 200; t++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) for(int k = 1; k <= n; k++) g[t][i][j] = min(g[t][i][j], g[t-1][i][k] + f[200][k][j]);
for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) for(int t = 199; t >= 0; t--) f[t][i][j] = min(f[t+1][i][j], f[t][i][j]), g[t][i][j] = min(g[t+1][i][j], g[t][i][j]);
Q = read();
while(Q--) {
int x = read(), y = read(), lim = read();
int Ans = inf;
for(int i = 1; i <= n; i++) Ans = min(Ans, g[lim/200][x][i] + f[lim%200][i][y]);
for(int i = 1; i <= n; i++) Ans = min(Ans, g[lim/200 + 1][x][i] + f[0][i][y]);
// Ans = min(Ans, g[lim/200+1][x][y]);
if(Ans == inf) puts("-1");
else write(Ans), putchar('\n');
}
}
return 0;
}
/*
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 13800kb
input:
2 3 3 1 2 1 2 3 10 3 1 100 3 1 1 1 1 2 1 1 3 1 2 1 1 2 1 1 2 1 1
output:
111 1 11 -1
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 321ms
memory: 14368kb
input:
10 5 10 4 2 55 2 1 26 3 4 83 5 2 16 4 5 54 3 4 38 2 1 68 2 5 1 4 5 85 4 2 60 20 2 1 13 1 4 17 3 2 20 2 4 16 4 2 17 4 2 2 3 1 2 1 5 10 2 1 8 4 5 15 4 2 16 3 1 18 5 2 7 4 2 9 4 3 16 1 4 18 3 2 5 1 5 9 5 1 19 1 2 16 20 50 4 16 25 3 16 990 9 18 863 19 12 236 4 10 360 13 4 585 14 17 164 8 18 198 2 17 804...
output:
128 -1 246 -1 191 70 119 -1 94 173 189 253 67 123 -1 -1 125 -1 195 -1 -1 23449 3476 18735 17412 23124 29499 26452 9757 21128 9524 -1 4486 8797 8041 33717 32669 5108 32534 13020 22800 4411 3529 37460 4191 15863 5342 22005 -1 14496 16535 13644 -1 33956 28717 24721 13816 26289 8840 28137 9991 14430 -1 ...
result:
ok 406120 lines
Test #3:
score: 0
Accepted
time: 441ms
memory: 14816kb
input:
10 5 10 4 1 62 3 5 93 4 5 99 2 5 63 2 4 26 5 3 31 2 5 14 5 3 54 1 2 47 1 5 18 200 2 5 8 3 1 17 1 5 11 2 1 17 4 2 1 4 2 13 5 1 13 5 2 2 1 4 8 2 3 4 1 1 1 1 5 7 3 5 3 5 3 12 1 4 18 3 1 11 5 4 2 1 3 4 5 5 13 2 3 12 1 4 19 3 5 17 3 5 20 3 3 1 5 5 9 1 5 7 2 4 9 4 5 16 1 3 19 4 1 18 2 1 16 3 5 17 4 5 7 3 ...
output:
365 -1 466 763 109 649 -1 -1 343 137 135 288 217 775 883 -1 -1 173 868 531 883 1085 1333 124 620 288 431 744 848 872 763 1085 339 -1 343 -1 341 -1 161 784 -1 109 244 49 -1 424 871 -1 -1 872 587 393 270 763 61 701 620 -1 -1 270 558 -1 559 341 -1 540 135 -1 857 -1 -1 810 31 713 467 -1 -1 -1 277 784 69...
result:
ok 900200 lines