QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#81895#1274. Walking Plan12345678AC ✓441ms14816kbC++142.6kb2023-02-26 17:26:112023-02-26 17:26:12

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-02-26 17:26:12]
  • 评测
  • 测评结果:AC
  • 用时:441ms
  • 内存:14816kb
  • [2023-02-26 17:26:11]
  • 提交

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