#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define mod 100003
vector<int> a[N];
queue<int> q;
bool vis[N];
int n, m, u, v, dis[N], ans[N];
void bfs()
{
q.push(1);
vis[1]=true;
while(!q.empty()){
u=q.front();
q.pop();
for(int i=0; i<a[u].size(); ++i){
v=a[u][i];
if(!vis[v]){ //第一次到达v点
dis[v]=dis[u]+1; //找到从1号点到v号点的最短路了
q.push(v);
vis[v]=true;
ans[v]=ans[u]%mod; //到v的方案数等于到u的方案数
}
else if(dis[u]+1==dis[v]){ //之前已经找到了v的最短路, 并且这一分支也是最短路
ans[v]+=ans[u]%mod; //加上1号点到u的方案数
}
}
}
}
int main()
{
scanf("%d %d", &n, &m);
for(int i=1; i<=m; ++i){
scanf("%d %d", &u, &v);
if(u!=v){
a[u].push_back(v);
a[v].push_back(u);
}
}
ans[1]=1;
bfs();
for(int i=1; i<=n; ++i){
printf("%d\n", ans[i]%mod);
}
return 0;
}
P1144 最短路计数
最新推荐文章于 2022-05-13 14:11:30 发布