-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0 1 BFS.cpp
49 lines (41 loc) · 991 Bytes
/
0 1 BFS.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 0 1 - BFS
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int INF = INT_MAX;
vector<pair<int, int>> g[N];
vector<int> level(N, INF);
int n, m;
int bfs(){
deque<int> dq;
dq.push_back(1);
level[1] = 0;
while(!dq.empty()){
int v = dq.front();
dq.pop_front();
for(auto &child: g[v]){
int child_v = child.first;
int wt = child.second;
if(level[v] + wt < level[child_v]){
level[child_v] = level[v] + wt;
if(wt == 1){
dq.push_back(child_v);
}else{
dq.push_front(child_v);
}
}
}
}
return level[n] == INF ? -1: level[n];
}
int main(){
cin >> n >> m;
for(int i = 0; i < m; ++i){
int u, v;
cin >> u >> v;
if(u == v) continue;
g[u].push_back({v,0});
g[v].push_back({u,1});
}
cout << bfs() << endl;
}