제출 #162869

#제출 시각아이디문제언어결과실행 시간메모리
162869mrboorgerEvacuation plan (IZhO18_plan)C++17
54 / 100
636 ms20872 KiB
//#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <bits/stdc++.h> #define pb push_back #define F first #define S second #define ll long long #define ull unsigned long long #define ld long double #define sqr(x) (x) * (x) using namespace std; using namespace __gnu_pbds; const int maxn = 1e5 + 2; const int inf = 1e9 + 33333; vector <pair <int, int>> g[maxn]; bool used[maxn]; int d[maxn]; int mid; void dfs(int v) { used[v] = true; for(pair <int, int> to : g[v]) if(!used[to.F] && d[to.F] >= mid) dfs(to.F); return; } int main() { #ifdef LOCAL // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); #endif // LOCAL ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; for(int i = 0; i < m; ++i) { int x, y, z; cin >> x >> y >> z; --x; --y; g[x].pb({y, z}); g[y].pb({x, z}); } fill(d, d + n, inf); priority_queue <pair <int, int>, vector <pair <int, int>>, greater<pair <int, int>>> q; int k; cin >> k; for(int i = 0; i < k; ++i) { int x; cin >> x; --x; d[x] = 0; q.push({0, x}); } while(!q.empty()) { int val = q.top().F; int v = q.top().S; q.pop(); if (val > d[v]) continue; for(pair <int, int> to : g[v]) { if (d[to.F] > val + to.S) { d[to.F] = val + to.S; q.push({val + to.S, to.F}); } } } int Q; cin >> Q; if (1ll * n * Q < 2e6 + 1) for(int ii = 0; ii < Q; ++ii) { int x, y; cin >> x >> y; --x; --y; int l = 0, r = 1e9; int ans = 0; while(l <= r) { mid = (l + r) / 2; fill(used, used + n, false); if (d[x] >= mid) dfs(x); if (used[y]) { ans = max(ans, mid); l = mid + 1; } else { r = mid - 1; } } cout << ans << '\n'; } else for(int ii = 0; ii < Q; ++ii) { int x, y; cin >> x >> y; --x; --y; cout << min(d[x], d[y]) << '\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...