Pagini recente » Cod sursa (job #2294619) | Cod sursa (job #939372) | Cod sursa (job #2293871) | Cod sursa (job #2140386) | Cod sursa (job #3163691)
#include <iostream>
#include <vector>
#include <queue>
const int NMAX = 100001;
std::vector<int> G[NMAX];
int viz[NMAX];
int dist[NMAX];
int puncte_control[NMAX];
int n, m;
int nod_start;
std::queue<int> Q;
void citire()
{
std::cin >> n >> m;
int x, y;
for (int i = 1; i <= m; ++i)
{
std::cin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
int punct_control;
while (std::cin >> punct_control)
{
puncte_control[punct_control] = 1;
Q.push(punct_control);
viz[punct_control] = 1;
}
for (int i = 1; i <= n; ++i)
{
dist[i] = NMAX;
}
}
void bfs()
{
while (!Q.empty())
{
int nod = Q.front();
Q.pop();
for (auto x : G[nod])
{
dist[x] = std::min(dist[x], dist[nod] + 1);
if (!viz[x])
{
viz[x] = 1;
Q.push(x);
}
}
}
}
void solve()
{
for (int i = 1; i <= n; ++i)
if (puncte_control[i])
dist[i] = 0;
bfs();
for (int i = 1; i <= n; ++i)
{
std::cout << dist[i] << " ";
}
}
void testare()
{
for (int i = 1; i <= n; ++i)
{
std::cout << i << ": ";
for (auto nod : G[i])
{
std::cout << nod << " ";
}
std::cout << '\n';
}
for (int i = 1; i <= n; ++i)
{
if (puncte_control[i])
std::cout << i << " ";
}
}
int main()
{
citire();
//testare();
solve();
}