제출 #166438

#제출 시각아이디문제언어결과실행 시간메모리
166438dolphingarlic007 (CEOI14_007)C++14
0 / 100
810 ms23928 KiB
#include <bits/stdc++.h> #define FOR(i, x, y) for (int i = x; i < y; i++) typedef long long ll; using namespace std; vector<int> graph[200001]; int visited[200001], reachable[200001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, s, d, a, b; cin >> n >> m >> s >> d >> a >> b; FOR(i, 0, m) { int a, b; cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } memset(visited, -1, sizeof(visited)); queue<int> q; visited[s] = 0; q.push(s); while (q.size()) { int curr = q.front(); q.pop(); for (int i : graph[curr]) { if (!(~visited[i])) { q.push(i); visited[i] = visited[curr] + 1; } } } int l = 0, r = 1000000; while (l != r) { int mid = (l + r + 1) / 2; memset(reachable, -1, sizeof(reachable)); queue<int> q; reachable[d] = 0; q.push(d); while (q.size()) { int curr = q.front(); q.pop(); for (int i : graph[curr]) { if (!(~reachable[i]) && reachable[curr] + 1 < visited[i] + mid) { reachable[i] = reachable[curr] + 1; q.push(i); } } } if (~reachable[a] || ~reachable[b]) r = mid - 1; else l = mid; } memset(reachable, -1, sizeof(reachable)); reachable[d] = 0; q.push(d); while (q.size()) { int curr = q.front(); q.pop(); for (int i : graph[curr]) { if (!(~reachable[i]) && reachable[curr] + 1 < visited[i] + l) { reachable[i] = reachable[curr] + 1; q.push(i); } } } if (~reachable[a] || ~reachable[b]) cout << -1; else cout << l; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...