#include <bits/stdc++.h>
#define MAX 6000000
#define INF 2147483647
using namespace std;
struct edge
{
long long next;
long long to;
long long dis;
}e[MAX];
long long cnt[MAX],dis[MAX],visit[MAX],head[MAX],que[MAX*10],hp=0,tp=0,nume=0,ans=0;
long long n,m,s,u,v,w;
void adde(long long from,long long to)
{
e[++nume].next=head[from];
e[nume].to=to;
e[nume].dis=1;
head[from]=nume;
}
int main()
{
scanf("%d%d",&n,&m);
for(long long i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
if(u!=v)adde(u,v);
if(u!=v)adde(v,u);
}
for(int i=1;i<=n;i++)
dis[i]=INF;
dis[1]=0;visit[1]=1;
que[++hp]=1;++tp;
while(que[hp]!=0)
{
int top=que[hp];
que[hp]=0;visit[top]=0;
for(int i=head[top];i!=0;i=e[i].next)
{
int to=e[i].to;
if(dis[top]+e[i].dis==dis[to])
++cnt[to],cnt[to]%=100003;
if(dis[top]+e[i].dis<=dis[to])
{
if(dis[top]+e[i].dis<dis[to])cnt[to]=1;
dis[to]=dis[top]+e[i].dis;
if(!visit[i])
{
que[++tp]=to;
if(tp>MAX*10-2)tp=1;
visit[i]=1;
}
}
}
hp++;
if(hp>MAX*10-2)hp=1;
}
printf("1\n");
for(int i=2;i<=n;i++)
printf("%d\n",cnt[i]%100003);
return 0;
}
找不到问题,或者给一组小的hack数据也行。
谢谢大佬们了