You are on page 1of 3

#include <iostream>

#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;

int main () {

int n;
cin >> n;
int m ;
cin >> m;

vector <int> adj[n];

int src;
cin >> src;
int tar;
cin >> tar;

vector <int> cursed (n);


for( int i = 1 ; i <= n ; i++){
int x;
cin >> x;
cursed.push_back(x);
}

for( int j =0 ; j < m ; j++) {


int w;
cin >> w;
int r;
cin >> r;
adj[w].push_back(r);
adj[r].push_back(w);
}

queue <int> q;
vector <bool> visited ( n+1 , false);
vector<int> dis( n+1 , 0);

q.push(src);
visited[src] = true;
dis[src] = 0;
while( !q.empty() ) {
int u = q.front();
q.pop();

for (int i = 0; i < adj[u].size(); i++) {


if (visited[adj[u][i]] == false && cursed[adj[u][i]] != 1) {
visited[adj[u][i]] = true;
dis[adj[u][i]] = dis[u] + 1;
q.push(adj[u][i]);

// We stop BFS when we find


// destination.
if (adj[u][i] == tar)
cout << dis[tar] << endl;
}

}
}

if( dis[tar] == 0){


cout << -1 << endl;
}

}#include <iostream>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;

int main () {

int n;
cin >> n;
int m ;
cin >> m;

vector <int> adj[n];

int src;
cin >> src;
int tar;
cin >> tar;

vector <int> cursed (n);


for( int i = 1 ; i <= n ; i++){
int x;
cin >> x;
cursed.push_back(x);
}

for( int j =0 ; j < m ; j++) {


int w;
cin >> w;
int r;
cin >> r;
adj[w].push_back(r);
adj[r].push_back(w);
}

queue <int> q;
vector <bool> visited ( n+1 , false);
vector<int> dis( n+1 , 0);

q.push(src);
visited[src] = true;
dis[src] = 0;
while( !q.empty() ) {
int u = q.front();
q.pop();

for (int i = 0; i < adj[u].size(); i++) {


if (visited[adj[u][i]] == false && cursed[adj[u][i]] != 1) {
visited[adj[u][i]] = true;
dis[adj[u][i]] = dis[u] + 1;
q.push(adj[u][i]);

// We stop BFS when we find


// destination.
if (adj[u][i] == tar)
cout << dis[tar] << endl;

}
}

if( dis[tar] == 0){


cout << -1 << endl;
}

You might also like