Pagini recente » Cod sursa (job #3297338) | Cod sursa (job #3297292) | Cod sursa (job #3297322) | Cod sursa (job #3297301)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5;
const long long INF = 1e18;
long long minDist[NMAX + 1];
vector <pair<int, int>> edges[NMAX + 1];
int viz[NMAX + 1];
int main() {
ifstream fin( "bfs.in" );
ofstream fout( "bfs.out" );
int n, m, s;
fin >> n >> m >> s;
for ( int i = 1, a, b, c; i <= m; i ++ ) {
fin >> a >> b;
edges[a].push_back( {b, 1} );
}
priority_queue <pair <long long, int>> pq;
for ( int i = 1; i <= n; i ++ ) {
minDist[i] = INF;
}
minDist[s] = 0;
pq.push( {0, s} );
while ( !pq.empty() ) {
int node = pq.top().second;
pq.pop();
if ( !viz[node] ) {
viz[node] = true;
for ( auto e : edges[node] ) {
if ( minDist[node] + e.second < minDist[e.first] ) {
minDist[e.first] = minDist[node] + e.second;
pq.push( {-minDist[e.first], e.first} );
}
}
}
}
for ( int i = 1; i <= n; i ++ ) {
if ( minDist[i] == INF ) minDist[i] = -1;
fout << minDist[i] << ' ';
}
fout << '\n';
return 0;
}