Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<queue>
- #define ll long long
- #define boost cin.tie(nullptr); cout.tie(nullptr); ios::sync_with_stdio(false);
- using namespace std;
- using graph = vector<vector<ll>>; //bits/stdc++.h
- void bfs(ll s, const graph& gr, vector<ll>& lvls){
- lvls.assign(gr.size(),-1);
- lvls[s] = 0;
- queue<ll> q;
- q.push(s);
- while(!q.empty()){
- ll u = q.front();
- q.pop();
- for (int v:gr[u]){
- if(lvls[v] != -1){
- continue;
- }
- lvls[v] = lvls[u] + 1;
- q.push(v);
- }
- }
- }
- ll get_path(ll s, ll f, const graph& gr){
- vector<ll> lvls;
- bfs(f, gr, lvls);
- if(lvls[s] == -1) return 0;
- if(lvls[f] == -1) return 0;
- vector<ll> path;
- path.push_back(s);
- while(path.back()!=f){
- ll lvl = lvls[path.back()];
- for (ll prev:gr[path.back()]){
- if (lvls[prev] == lvl - 1){
- path.push_back(prev);
- break;
- }
- }
- }
- return path.size();
- }
- int main(){
- boost;
- ll m, n, k, s;
- vector<ll> lvls;
- scanf("%lld %lld %lld", &n ,&m ,&k);
- k --;
- graph gr(n);
- for(ll i = 0; i < m; ++i){
- ll u, v;
- scanf("%lld %lld",&u,&v);
- u--; v--;
- gr[u].push_back(v);
- gr[v].push_back(u);
- }
- bfs(k, gr, lvls);
- for (ll i: lvls)
- cout << i << ' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement