#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;
}
}
#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
Post a Comment