답안 #396414

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
396414 2021-04-29T23:57:11 Z ChrisT Escape Route (JOI21_escape_route) C++17
35 / 100
9000 ms 212876 KB
#include <bits/stdc++.h>
#include "escape_route.h"
using namespace std;
const int MN = 60 + 1;
long long pre[MN][MN*MN][MN], stop[MN][MN];
vector<long long> times[MN];
long long adj[MN][MN], bad[MN][MN];
bool vis[MN];
vector<long long> calculate_necessary_time (int n, int m, long long s, int q, vector<int> a, vector<int> b, vector<long long> l, vector<long long> c, vector<int> u, vector<int> v, vector<long long> T) {
	memset(adj,0x3f,sizeof adj);
	for (int i = 0; i < m; i++) {
		adj[++a[i]][++b[i]] = l[i];
		adj[b[i]][a[i]] = l[i];
		bad[a[i]][b[i]] = bad[b[i]][a[i]] = c[i];
	}
	for (int st = 1; st <= n; st++) {
		memset(stop[st],0x3f,sizeof stop[st]); memset(vis,0,sizeof vis);
		stop[st][st] = 0;
		for (int iter = 0; iter < n; iter++) {
			int mn = -1;
			for (int i = 1; i <= n; i++) if (!vis[i] && (mn == -1 || stop[st][i] < stop[st][mn])) mn = i;
			if (mn == -1 || stop[st][mn] > 1e18) break;
			vis[mn] = true;
			for (int i = 1; i <= n; i++) if (adj[mn][i] < 1e18) {
				long long att = stop[st][mn];
				if (att%s <= bad[mn][i] - adj[mn][i]) att += adj[mn][i];
				else att += (s - att%s) + adj[mn][i];
				stop[st][i] = min(stop[st][i],att);
			}
		}
	}
	for (int st = 1; st <= n; st++) { //no stop all go
		times[st].push_back(0);
		for (int id = 0; id < (int)times[st].size(); id++) {
			long long t = times[st][id];
			memset(pre[st][id],0x3f,sizeof pre[st][id]);
			memset(vis,0,sizeof vis);
			pre[st][id][st] = t;
			for (int iter = 0; iter < n; iter++) {
				int mn = -1;
				for (int i = 1; i <= n; i++) if (!vis[i] && (mn == -1 || pre[st][id][i] < pre[st][id][mn])) mn = i;
				if (mn == -1 || pre[st][id][mn] > 1e18) break;
				vis[mn] = true;
				for (int i = 1; i <= n; i++) if (adj[mn][i] < 1e18) {
					long long att = pre[st][id][mn];
					if (att%s <= bad[mn][i] - adj[mn][i]) att += adj[mn][i];
					else continue; //no stop
					pre[st][id][i] = min(pre[st][id][i],att);
				}
			}
			long long nextTime = 1e18 + 5;
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++) if (adj[i][j] < 1e18 && pre[st][id][i] < 1e18 && pre[st][id][j] < 1e18) {
					if (pre[st][id][i]%s <= bad[i][j] - adj[i][j]) nextTime = min(nextTime,bad[i][j] - adj[i][j] + 1 - pre[st][id][i]%s + t);
				}
			}
			if (nextTime < s) times[st].push_back(nextTime);
		}
	}
	vector<long long> ret(q);
	for (int i = 0; i < q; i++) {
		++u[i]; ++v[i];
		int id = upper_bound(times[u[i]].begin(),times[u[i]].end(),T[i]) - times[u[i]].begin() - 1;
		long long t = times[u[i]][id];
		ret[i] = pre[u[i]][id][v[i]] - t;
		for (int ed = 1; ed <= n; ed++) {
			long long att = pre[u[i]][id][ed] + T[i] - t;
			if (att % s) att += s - att % s;
			ret[i] = min(ret[i],att+stop[ed][v[i]]-T[i]);
		}
	}
	return ret;
}

# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 64972 KB Output is correct
2 Correct 79 ms 64972 KB Output is correct
3 Correct 1342 ms 65104 KB Output is correct
4 Correct 33 ms 64964 KB Output is correct
5 Correct 35 ms 64960 KB Output is correct
6 Correct 34 ms 64972 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2494 ms 174936 KB Output is correct
2 Correct 2540 ms 200552 KB Output is correct
3 Correct 2609 ms 180164 KB Output is correct
4 Correct 2692 ms 210460 KB Output is correct
5 Correct 2674 ms 210080 KB Output is correct
6 Correct 32 ms 64964 KB Output is correct
7 Correct 2632 ms 180468 KB Output is correct
8 Correct 1393 ms 194848 KB Output is correct
9 Correct 2684 ms 170720 KB Output is correct
10 Correct 2664 ms 209840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 64972 KB Output is correct
2 Correct 79 ms 64972 KB Output is correct
3 Correct 1342 ms 65104 KB Output is correct
4 Correct 33 ms 64964 KB Output is correct
5 Correct 35 ms 64960 KB Output is correct
6 Correct 34 ms 64972 KB Output is correct
7 Correct 2494 ms 174936 KB Output is correct
8 Correct 2540 ms 200552 KB Output is correct
9 Correct 2609 ms 180164 KB Output is correct
10 Correct 2692 ms 210460 KB Output is correct
11 Correct 2674 ms 210080 KB Output is correct
12 Correct 32 ms 64964 KB Output is correct
13 Correct 2632 ms 180468 KB Output is correct
14 Correct 1393 ms 194848 KB Output is correct
15 Correct 2684 ms 170720 KB Output is correct
16 Correct 2664 ms 209840 KB Output is correct
17 Correct 3138 ms 181408 KB Output is correct
18 Correct 2918 ms 177064 KB Output is correct
19 Correct 2674 ms 203536 KB Output is correct
20 Correct 2951 ms 182008 KB Output is correct
21 Correct 3109 ms 212876 KB Output is correct
22 Correct 3119 ms 212796 KB Output is correct
23 Correct 3010 ms 182284 KB Output is correct
24 Correct 1433 ms 196944 KB Output is correct
25 Correct 3057 ms 172200 KB Output is correct
26 Correct 3074 ms 212800 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 64972 KB Output is correct
2 Correct 79 ms 64972 KB Output is correct
3 Correct 1342 ms 65104 KB Output is correct
4 Correct 33 ms 64964 KB Output is correct
5 Correct 35 ms 64960 KB Output is correct
6 Correct 34 ms 64972 KB Output is correct
7 Correct 2494 ms 174936 KB Output is correct
8 Correct 2540 ms 200552 KB Output is correct
9 Correct 2609 ms 180164 KB Output is correct
10 Correct 2692 ms 210460 KB Output is correct
11 Correct 2674 ms 210080 KB Output is correct
12 Correct 32 ms 64964 KB Output is correct
13 Correct 2632 ms 180468 KB Output is correct
14 Correct 1393 ms 194848 KB Output is correct
15 Correct 2684 ms 170720 KB Output is correct
16 Correct 2664 ms 209840 KB Output is correct
17 Correct 3138 ms 181408 KB Output is correct
18 Correct 2918 ms 177064 KB Output is correct
19 Correct 2674 ms 203536 KB Output is correct
20 Correct 2951 ms 182008 KB Output is correct
21 Correct 3109 ms 212876 KB Output is correct
22 Correct 3119 ms 212796 KB Output is correct
23 Correct 3010 ms 182284 KB Output is correct
24 Correct 1433 ms 196944 KB Output is correct
25 Correct 3057 ms 172200 KB Output is correct
26 Correct 3074 ms 212800 KB Output is correct
27 Execution timed out 9029 ms 169596 KB Time limit exceeded
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 64972 KB Output is correct
2 Correct 79 ms 64972 KB Output is correct
3 Correct 1342 ms 65104 KB Output is correct
4 Correct 33 ms 64964 KB Output is correct
5 Correct 35 ms 64960 KB Output is correct
6 Correct 34 ms 64972 KB Output is correct
7 Correct 2494 ms 174936 KB Output is correct
8 Correct 2540 ms 200552 KB Output is correct
9 Correct 2609 ms 180164 KB Output is correct
10 Correct 2692 ms 210460 KB Output is correct
11 Correct 2674 ms 210080 KB Output is correct
12 Correct 32 ms 64964 KB Output is correct
13 Correct 2632 ms 180468 KB Output is correct
14 Correct 1393 ms 194848 KB Output is correct
15 Correct 2684 ms 170720 KB Output is correct
16 Correct 2664 ms 209840 KB Output is correct
17 Correct 3138 ms 181408 KB Output is correct
18 Correct 2918 ms 177064 KB Output is correct
19 Correct 2674 ms 203536 KB Output is correct
20 Correct 2951 ms 182008 KB Output is correct
21 Correct 3109 ms 212876 KB Output is correct
22 Correct 3119 ms 212796 KB Output is correct
23 Correct 3010 ms 182284 KB Output is correct
24 Correct 1433 ms 196944 KB Output is correct
25 Correct 3057 ms 172200 KB Output is correct
26 Correct 3074 ms 212800 KB Output is correct
27 Execution timed out 9029 ms 169596 KB Time limit exceeded
28 Halted 0 ms 0 KB -