제출 #923420

#제출 시각아이디문제언어결과실행 시간메모리
923420Amirreza_FakhriToll (BOI17_toll)C++17
100 / 100
103 ms18032 KiB
// In the name of the God #include <bits/stdc++.h> #define ll long long // #define int long long #define pb push_back #define F first #define S second #define mp make_pair #define pii pair <int, int> #define smin(x, y) (x) = min((x), (y)) #define smax(x, y) (x) = max((x), (y)) #define all(x) (x).begin(), (x).end() using namespace std; const int inf = 1e9+7; const int mod = 998244353; const int maxn = 5e4+5, maxk = 5; int k, n, m, o; vector <vector <int> > seg[maxn*4]; vector <pii> adj[maxn]; vector <vector <int> > merge(vector <vector <int> > l, vector <vector <int> > r) { vector <vector <int> > res; vector <int> v; v.resize(k, inf); for (int i = 0; i < k; i++) res.pb(v); for (int i = 0; i < k; i++) { for (int j = 0; j < k; j++) { for (int u = 0; u < k; u++) smin(res[i][j], l[i][u]+r[u][j]); } } return res; } void build(int l = 0, int r = (n-1)/k+1, int id = 1) { if (l+1 == r) { vector <int> v; v.resize(k, inf); for (int i = 0; i < k; i++) seg[id].pb(v); for (int i = 0; i < k; i++) { for (pii j : adj[l*k+i]) seg[id][i][j.F] = j.S; } return; } int mid = (l+r)/2; build(l, mid, id*2), build(mid, r, id*2+1); seg[id] = merge(seg[id*2], seg[id*2+1]); } vector <vector <int> > get(int s, int e, int l = 0, int r = (n-1)/k+1, int id = 1) { if (s <= l and r <= e) { for (int i = 0; i < k; i++) return seg[id]; } int mid = (l+r)/2; if (e <= mid) return get(s, e, l, mid, id*2); if (s >= mid) return get(s, e, mid, r, id*2+1); return merge(get(s, e, l, mid, id*2), get(s, e, mid, r, id*2+1)); } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> k >> n >> m >> o; while (m--) { int a, b, c; cin >> a >> b >> c; adj[a].pb(mp(b%k, c)); } build(); while (o--) { int a, b; cin >> a >> b; if (a/k == b/k) cout << -1 << '\n'; else { int ans = get(a/k, b/k)[a%k][b%k]; cout << (ans == inf ? -1 : ans) << '\n'; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...