请问是因为重边吗?邻接矩阵好像就可以过欸
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=100010,MOD=100003;
#define INF 0x7fffffff
int to[2*maxn], ne[2*maxn],cnt[maxn],dis[maxn],h[maxn],weight[2*maxn],idx;
bool done[maxn];
void add(int u, int v) {
to[idx] = v, ne[idx] = h[u], h[u] = idx++;//前插链表
}
int n,m;
void bfs(int root) {
dis[root]=0;
cnt[root]=1;
queue<int> q;
q.push(root);
done[root]=true;
while (!q.empty()) {
int t = q.front(); q.pop();
for (int i = h[t]; i != -1; i = ne[i]) {
int y=to[i];
if(!done[y]) {
dis[y]=dis[t]+1;
done[y]=true;
q.push(y);
}
if(dis[y]==dis[t]+1) cnt[y]=(cnt[y]%MOD+cnt[t]%MOD)%MOD;
}
}
}
int main() {
scanf("%d%d", &n, &m);
memset(h,-1,sizeof h);
for (int i = 1,x,y; i <= m; i++) {
scanf("%d%d", &x ,& y);
add(x, y);
add(y, x);
}
for(int i=1;i<=n;i++) dis[i]=INF,done[i]=false;
bfs(1);
for (int i = 1; i <= n; i++) {
if (dis[i] != INF)
printf("%d\n", cnt[i] % MOD);
else puts("0");
}
return 0;
}