답안 #472605

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
472605 2021-09-13T19:18:39 Z disastah Toll (BOI17_toll) C++17
46 / 100
143 ms 39252 KB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define ar array
using namespace std;
typedef long double ld;
typedef long long ll;
const int inf=1e9+9;
const ll linf=4e18+18;
const int N=5e4;

int k, n, m, q;
vector<ar<int,2>> g[N], rg[N];
ll dst[20][N][5]; int dst_mask[N];

void build_dst(int h, int l, int r) {
	int m=(l+r)/2;
	for (int i=m*k; i<r*k; ++i) dst_mask[i]^=(1<<h);
	for (int k0=0; k0<k; ++k0) {
		dst[h][m*k+k0][k0]=0;
		for (int i=m*k+k0-1; i>=l*k; --i) {
			dst[h][i][k0]=inf;
			for (auto &[u,t] : g[i]) {
				if (u>m*k+k0) continue;
				dst[h][i][k0]=min(dst[h][i][k0],dst[h][u][k0]+t);
			}
		}
		for (int i=m*k+k0+1; i<r*k; ++i) {
			dst[h][i][k0]=inf;
			for (auto &[u,t] : rg[i]) {
				if (u<m*k+k0) continue;
				dst[h][i][k0]=min(dst[h][i][k0],dst[h][u][k0]+t);
			}
		}
	}
	if (l+1<r) {
		build_dst(h+1,l,m);
		build_dst(h+1,m,r);
	}
}

void solve() {
	cin >> k >> n >> m >> q;
	for (int i=0; i<m; ++i) {
		int a, b, t; cin >> a >> b >> t;
		g[a].push_back({b,t});
		rg[b].push_back({a,t});
	}
	build_dst(0,0,(n+k-1)/k);
	while(q--) {
		int a, b; cin >> a >> b;
		if (a/k==b/k) {
			cout << "-1\n";
			continue;
		}
		int h=__builtin_ctz(dst_mask[a]^dst_mask[b]);
		assert(h<30);
		ll ans=inf;
		for (int i=0; i<k; ++i) ans=min(ans,dst[h][a][i]+dst[h][b][i]);
		cout << (ans<inf?ans:-1) << "\n";
	}
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
#ifdef disastah
	cout << "Output\n\n";
#endif
	int tt=1;
//	cin >> tt;
	while (tt--) {
		solve();
		cout << "\n";
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 62 ms 39232 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 3 ms 3148 KB Output is correct
6 Correct 3 ms 3148 KB Output is correct
7 Correct 3 ms 3248 KB Output is correct
8 Correct 53 ms 39176 KB Output is correct
9 Correct 51 ms 39004 KB Output is correct
10 Correct 22 ms 36136 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 91 ms 37340 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 2 ms 2636 KB Output is correct
7 Correct 5 ms 3276 KB Output is correct
8 Correct 6 ms 3204 KB Output is correct
9 Correct 53 ms 39200 KB Output is correct
10 Incorrect 141 ms 38236 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2664 KB Output is correct
3 Correct 2 ms 2684 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 3 ms 3148 KB Output is correct
7 Correct 3 ms 3148 KB Output is correct
8 Correct 5 ms 3236 KB Output is correct
9 Correct 5 ms 3148 KB Output is correct
10 Correct 64 ms 39228 KB Output is correct
11 Correct 88 ms 37260 KB Output is correct
12 Correct 120 ms 38212 KB Output is correct
13 Correct 143 ms 38644 KB Output is correct
14 Correct 111 ms 37500 KB Output is correct
15 Correct 95 ms 21884 KB Output is correct
16 Correct 73 ms 21828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2664 KB Output is correct
3 Correct 2 ms 2684 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 3 ms 3148 KB Output is correct
7 Correct 3 ms 3148 KB Output is correct
8 Correct 5 ms 3236 KB Output is correct
9 Correct 5 ms 3148 KB Output is correct
10 Correct 64 ms 39228 KB Output is correct
11 Correct 88 ms 37260 KB Output is correct
12 Correct 120 ms 38212 KB Output is correct
13 Correct 143 ms 38644 KB Output is correct
14 Correct 111 ms 37500 KB Output is correct
15 Correct 95 ms 21884 KB Output is correct
16 Correct 73 ms 21828 KB Output is correct
17 Correct 80 ms 37224 KB Output is correct
18 Correct 2 ms 2636 KB Output is correct
19 Correct 3 ms 2636 KB Output is correct
20 Correct 2 ms 2636 KB Output is correct
21 Correct 2 ms 2636 KB Output is correct
22 Correct 2 ms 2636 KB Output is correct
23 Correct 3 ms 3148 KB Output is correct
24 Correct 4 ms 3148 KB Output is correct
25 Correct 5 ms 3240 KB Output is correct
26 Correct 5 ms 3148 KB Output is correct
27 Correct 52 ms 39252 KB Output is correct
28 Correct 120 ms 38320 KB Output is correct
29 Correct 132 ms 38724 KB Output is correct
30 Correct 120 ms 37500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 62 ms 39232 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 3 ms 3148 KB Output is correct
6 Correct 3 ms 3148 KB Output is correct
7 Correct 3 ms 3248 KB Output is correct
8 Correct 53 ms 39176 KB Output is correct
9 Correct 51 ms 39004 KB Output is correct
10 Correct 22 ms 36136 KB Output is correct
11 Correct 91 ms 37340 KB Output is correct
12 Correct 2 ms 2636 KB Output is correct
13 Correct 2 ms 2636 KB Output is correct
14 Correct 2 ms 2636 KB Output is correct
15 Correct 2 ms 2636 KB Output is correct
16 Correct 2 ms 2636 KB Output is correct
17 Correct 5 ms 3276 KB Output is correct
18 Correct 6 ms 3204 KB Output is correct
19 Correct 53 ms 39200 KB Output is correct
20 Incorrect 141 ms 38236 KB Output isn't correct
21 Halted 0 ms 0 KB -