#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <math.h>
#include <string>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <time.h>
#include <set>
#include <list>
#include <iostream>
using namespace std;
#define ll long long
#define ull unsigned long long
#define cls(x) memset(x,0,sizeof(x))
#define clslow(x) memset(x,-1,sizeof(x))
#define INF 0x3f3f3f3f
const int maxn=2e5+20;
int m,n,dis[maxn],vis[maxn];
set<int>sat[maxn];
void dij(int from)
{
queue<int>q;
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
q.push(from);
dis[from]=0;
vis[from]=1;
int num=1;
while(!q.empty()){
int st=q.front();
q.pop();
for(int ed=1;ed<=n;ed++){
if(ed==st)continue;
if(vis[ed]==1)continue;
if(sat[st].count(ed)==0 ){
dis[ed]=dis[st]+1;
vis[ed]=1;
num++;
if(num==n)break;//划重点
q.push(ed);
}
}
if(num==n)break;//划重点
}
for(int i=1;i<=n;i++){
if(i==from)continue;
dis[i]==0 ? printf("-1") : printf("%d",dis[i]);
i==n ? printf("\n") : printf(" ");
sat[i].clear();
}
}
int main()
{
// freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
while(m--){
int u,v;
scanf("%d%d",&u,&v);
sat[u].insert(v);
sat[v].insert(u);
}
int s;
scanf("%d",&s);
dij(s);
}
return 0;
}
//#endif
HDU 5876 set.count
最新推荐文章于 2022-08-02 20:40:27 发布