fork(2) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int a, b, c, f, m, n, p, r, s; vector<vector<int>> g; vector<int> d, h, v; queue<int> q;
  6. ios_base::sync_with_stdio(0), cin.tie(0), cin >> n >> m, p = n+1;
  7. for (g.resize(p), d.resize(p,-1), h.resize(p,0), v.resize(p,-1); m--; )
  8. cin >> a >> b, g[a].push_back(b), g[b].push_back(a);
  9. for (cin >> s >> f >> r, d[r] = 0, q.push(r); not q.empty(); q.pop())
  10. for (auto u: g[a = q.front()])
  11. if (d[u] == -1)
  12. d[u] = d[a]+1, q.push(u);
  13. for (h[s] = d[s], v[s] = 0, q.push(s); not q.empty(); q.pop())
  14. for (auto u: g[a = q.front()])
  15. if (b = v[a]+1, c = min(h[a],d[u]), v[u] == -1 or (v[u] >= b and c > h[u]))
  16. if (v[u] = b, h[u] = c, u != f)
  17. q.push(u);
  18. cout << h[f]; }
  19.  
Success #stdin #stdout 0s 4436KB
stdin
7 7
1 2
2 4
2 5
3 4
4 6
5 6
6 7
1 7 3
stdout
2