답안 #396456

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
396456 2021-04-30T01:30:26 Z ChrisT Escape Route (JOI21_escape_route) C++17
35 / 100
9000 ms 171256 KB
#include <bits/stdc++.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 <= 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++) {
				long long md = pre[st][id][i];
				for (int j = 1; j <= n; j++) if (pre[st][id][i] < 1e18 && md <= bad[i][j] - adj[i][j]) {
					nextTime = min(nextTime,bad[i][j] - adj[i][j] + 1 - md + 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++) if (pre[u[i]][id][ed] < 1e18) {
			long long att = pre[u[i]][id][ed] + T[i] - t;
			if (att > s) att = 2 * s;
          	else if (att > 0) att = s;
			ret[i] = min(ret[i],att+stop[ed][v[i]]-T[i]);
		}
	}
	return ret;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 30 ms 64972 KB Output is correct
2 Correct 62 ms 64968 KB Output is correct
3 Correct 853 ms 64948 KB Output is correct
4 Correct 30 ms 64972 KB Output is correct
5 Correct 30 ms 64972 KB Output is correct
6 Correct 30 ms 64964 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1836 ms 131916 KB Output is correct
2 Correct 1794 ms 148312 KB Output is correct
3 Correct 1784 ms 138472 KB Output is correct
4 Correct 1924 ms 149732 KB Output is correct
5 Correct 1934 ms 149284 KB Output is correct
6 Correct 29 ms 64972 KB Output is correct
7 Correct 1834 ms 137456 KB Output is correct
8 Correct 585 ms 134172 KB Output is correct
9 Correct 1882 ms 127688 KB Output is correct
10 Correct 1947 ms 148960 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 30 ms 64972 KB Output is correct
2 Correct 62 ms 64968 KB Output is correct
3 Correct 853 ms 64948 KB Output is correct
4 Correct 30 ms 64972 KB Output is correct
5 Correct 30 ms 64972 KB Output is correct
6 Correct 30 ms 64964 KB Output is correct
7 Correct 1836 ms 131916 KB Output is correct
8 Correct 1794 ms 148312 KB Output is correct
9 Correct 1784 ms 138472 KB Output is correct
10 Correct 1924 ms 149732 KB Output is correct
11 Correct 1934 ms 149284 KB Output is correct
12 Correct 29 ms 64972 KB Output is correct
13 Correct 1834 ms 137456 KB Output is correct
14 Correct 585 ms 134172 KB Output is correct
15 Correct 1882 ms 127688 KB Output is correct
16 Correct 1947 ms 148960 KB Output is correct
17 Correct 2403 ms 136220 KB Output is correct
18 Correct 2290 ms 131964 KB Output is correct
19 Correct 2021 ms 149200 KB Output is correct
20 Correct 2205 ms 137580 KB Output is correct
21 Correct 2361 ms 150140 KB Output is correct
22 Correct 2374 ms 149908 KB Output is correct
23 Correct 2256 ms 137128 KB Output is correct
24 Correct 714 ms 134144 KB Output is correct
25 Correct 2329 ms 126876 KB Output is correct
26 Correct 2349 ms 149928 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 30 ms 64972 KB Output is correct
2 Correct 62 ms 64968 KB Output is correct
3 Correct 853 ms 64948 KB Output is correct
4 Correct 30 ms 64972 KB Output is correct
5 Correct 30 ms 64972 KB Output is correct
6 Correct 30 ms 64964 KB Output is correct
7 Correct 1836 ms 131916 KB Output is correct
8 Correct 1794 ms 148312 KB Output is correct
9 Correct 1784 ms 138472 KB Output is correct
10 Correct 1924 ms 149732 KB Output is correct
11 Correct 1934 ms 149284 KB Output is correct
12 Correct 29 ms 64972 KB Output is correct
13 Correct 1834 ms 137456 KB Output is correct
14 Correct 585 ms 134172 KB Output is correct
15 Correct 1882 ms 127688 KB Output is correct
16 Correct 1947 ms 148960 KB Output is correct
17 Correct 2403 ms 136220 KB Output is correct
18 Correct 2290 ms 131964 KB Output is correct
19 Correct 2021 ms 149200 KB Output is correct
20 Correct 2205 ms 137580 KB Output is correct
21 Correct 2361 ms 150140 KB Output is correct
22 Correct 2374 ms 149908 KB Output is correct
23 Correct 2256 ms 137128 KB Output is correct
24 Correct 714 ms 134144 KB Output is correct
25 Correct 2329 ms 126876 KB Output is correct
26 Correct 2349 ms 149928 KB Output is correct
27 Execution timed out 9072 ms 171256 KB Time limit exceeded
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 30 ms 64972 KB Output is correct
2 Correct 62 ms 64968 KB Output is correct
3 Correct 853 ms 64948 KB Output is correct
4 Correct 30 ms 64972 KB Output is correct
5 Correct 30 ms 64972 KB Output is correct
6 Correct 30 ms 64964 KB Output is correct
7 Correct 1836 ms 131916 KB Output is correct
8 Correct 1794 ms 148312 KB Output is correct
9 Correct 1784 ms 138472 KB Output is correct
10 Correct 1924 ms 149732 KB Output is correct
11 Correct 1934 ms 149284 KB Output is correct
12 Correct 29 ms 64972 KB Output is correct
13 Correct 1834 ms 137456 KB Output is correct
14 Correct 585 ms 134172 KB Output is correct
15 Correct 1882 ms 127688 KB Output is correct
16 Correct 1947 ms 148960 KB Output is correct
17 Correct 2403 ms 136220 KB Output is correct
18 Correct 2290 ms 131964 KB Output is correct
19 Correct 2021 ms 149200 KB Output is correct
20 Correct 2205 ms 137580 KB Output is correct
21 Correct 2361 ms 150140 KB Output is correct
22 Correct 2374 ms 149908 KB Output is correct
23 Correct 2256 ms 137128 KB Output is correct
24 Correct 714 ms 134144 KB Output is correct
25 Correct 2329 ms 126876 KB Output is correct
26 Correct 2349 ms 149928 KB Output is correct
27 Execution timed out 9072 ms 171256 KB Time limit exceeded
28 Halted 0 ms 0 KB -