存存代码,可以给大家提供下思路ovo
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
int n,m;
vector <int>w[1000010];
int ans[1000010],bfs[1000010];
bool vis[1000010];
queue <int> q;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
w[x].push_back(y);//无向图
w[y].push_back(x);//可以互连
}
vis[1]=1;//封路,防止自环
q.push(1);ans[1]=1;//点1到自己的路长为1
//插入1,让队列q不为空
while(!q.empty())
{
int x=q.front();//赋值,让x赋队首值
q.pop();//出队
for(int i=0;i<w[x].size();i++)//获取x长度,开始循环
{
int t=w[x][i];//w容器里
if(!vis[t])
{
vis[t]=1;
bfs[t]=bfs[x]+1;
q.push(t);
}
if(bfs[t]==bfs[x]+1){
ans[t]=(ans[t]+ans[x])%100003;
}
}
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<endl;
}
return 0;
}