답안 #472600

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
472600 2021-09-13T19:14:29 Z disastah Toll (BOI17_toll) C++17
46 / 100
144 ms 41220 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 (dst_mask[a]==dst_mask[b]) {
			cout << "-1\n";
			continue;
		}
		int h=__builtin_ctz(dst_mask[a]^dst_mask[b]);
		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 59 ms 39236 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 3148 KB Output is correct
8 Correct 53 ms 39252 KB Output is correct
9 Correct 52 ms 39108 KB Output is correct
10 Correct 23 ms 36156 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 82 ms 37248 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 3156 KB Output is correct
9 Correct 56 ms 39232 KB Output is correct
10 Incorrect 144 ms 38276 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 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 3 ms 3148 KB Output is correct
7 Correct 3 ms 3148 KB Output is correct
8 Correct 5 ms 3276 KB Output is correct
9 Correct 4 ms 3148 KB Output is correct
10 Correct 53 ms 39200 KB Output is correct
11 Correct 87 ms 37228 KB Output is correct
12 Correct 140 ms 38224 KB Output is correct
13 Correct 130 ms 38736 KB Output is correct
14 Correct 113 ms 37572 KB Output is correct
15 Correct 83 ms 21804 KB Output is correct
16 Correct 97 ms 21824 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 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 3 ms 3148 KB Output is correct
7 Correct 3 ms 3148 KB Output is correct
8 Correct 5 ms 3276 KB Output is correct
9 Correct 4 ms 3148 KB Output is correct
10 Correct 53 ms 39200 KB Output is correct
11 Correct 87 ms 37228 KB Output is correct
12 Correct 140 ms 38224 KB Output is correct
13 Correct 130 ms 38736 KB Output is correct
14 Correct 113 ms 37572 KB Output is correct
15 Correct 83 ms 21804 KB Output is correct
16 Correct 97 ms 21824 KB Output is correct
17 Correct 79 ms 37316 KB Output is correct
18 Correct 2 ms 2636 KB Output is correct
19 Correct 2 ms 2636 KB Output is correct
20 Correct 3 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 4 ms 3276 KB Output is correct
24 Correct 5 ms 3276 KB Output is correct
25 Correct 5 ms 3276 KB Output is correct
26 Correct 5 ms 3188 KB Output is correct
27 Correct 50 ms 40000 KB Output is correct
28 Correct 139 ms 40512 KB Output is correct
29 Correct 130 ms 41220 KB Output is correct
30 Correct 117 ms 39408 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 59 ms 39236 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 3148 KB Output is correct
8 Correct 53 ms 39252 KB Output is correct
9 Correct 52 ms 39108 KB Output is correct
10 Correct 23 ms 36156 KB Output is correct
11 Correct 82 ms 37248 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 3156 KB Output is correct
19 Correct 56 ms 39232 KB Output is correct
20 Incorrect 144 ms 38276 KB Output isn't correct
21 Halted 0 ms 0 KB -