Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1717714)
#include <cstdio>
#include <vector>
#include <bitset>
#include <queue>
using namespace std;
int n, m, s;
int viz[100100];
vector<int> vecini[100100];
void citire()
{
scanf("%d %d %d", &n, &m, &s);
s--;
int tmp1, tmp2;
for(int i = 0; i < m; i++)
{
scanf("%d %d", &tmp1, &tmp2);
tmp1--;
tmp2--;
vecini[tmp1].push_back(tmp2);
}
}
void bfs()
{
queue<int> Q;
Q.push(s);
while(!Q.empty())
{
for(vector<int>::iterator it = vecini[Q.front()].begin(); it < vecini[Q.front()].end(); it++)
{
if((viz[*it] == 0 || viz[*it] > viz[Q.front()]) && *it != s)
{
viz[*it] = viz[Q.front()] + 1;
Q.push(*it);
}
}
Q.pop();
}
}
void afisare()
{
for(int i = 0; i < n; i++)
{
if(viz[i] == 0 && i != s)
{
printf("-1 ");
continue;
}
printf("%d ", viz[i]);
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
citire();
bfs();
afisare();
return 0;
}