Hackerrank Rust & Murderer Solution

#include <iostream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <functional>
#include <utility>
using namespace std;
int n,e,s;
vector<vector<int> >a(200001);
vector<int> dist(200001);
bitset<200001> vis;
void dfs(int u){
    vis[u]=1;
    for(int i=0;i<a[u].size();i++){
        vis[a[u][i]]=1;
        // if(!vis[a[u][i]])
        //     dfs(a[u][i]);
    }
}
int main(){
    ios::sync_with_stdio(0);
    int t;
    cin>>t;
    while(t--){
        cin>>n>>e;
        vis.reset();
        for(int i=1;i<=n;i++)
            a[i].clear();
        for(int i=0;i<e;i++){
            int x,y;
            cin>>x>>y;
            a[x].push_back(y);
            a[y].push_back(x);
        }
        for(int i=1;i<=n;i++)
            sort(a[i].begin(),a[i].end());
        cin>>s;
        dfs(s);
        dist[s]=0;
        queue<int> q;
        vis.flip();
        int count=1;
        for(int i=1;i<=n;i++){
            if(vis[i])
                dist[i]=1,q.push(i),count++;
        }
        vis[s]=1;
        while(count<n){
            // cout<<count<<endl;
            int u=q.front();
            q.pop();
            for(int i=1;i<=n;i++){
                if(vis[i])continue;
                vector<int>::iterator it=lower_bound(a[u].begin(),a[u].end(),i);
                if((it==a[u].end())||(*it!=i))
                    q.push(i),count++,dist[i]=dist[u]+1,vis[i]=1;
            }
        }
        int i;
        // cout<<n<<' '<<e<<' '<<s;
        if(s==1)
            cout<<dist[2],i=3;
        else
            cout<<dist[1],i=2;
        for(;i<=n;i++)
            if(i!=s)
                cout<<' '<<dist[i];
        cout<<endl;
    }
}

Comments