看了楼下的楼下的帖子,发现长得差不多,但还是TLE,求优化
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=100003;
ll n,m,ans[1000001],dis[1000001],h[1000001],nxt[1000001],cnt,to[1000001];
queue<ll>q;
void f(ll a,ll b)
{
to[++cnt]=b;
nxt[cnt]=h[a];
h[a]=cnt;
}
int main()
{
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=m;i++)
{
ll u,v;
scanf("%lld%lld",&u,&v);
f(u,v);
f(v,u);
}
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
ans[1]=1;
q.push(1);
while(!q.empty())
{
ll u=q.front();
q.pop();
for(ll i=h[u];i;i=nxt[i])
{
ll v=to[i];
if(dis[v]>dis[u]+1)
{
dis[v]=dis[u]+1;
ans[v]=ans[u];
q.push(v);
}
else if(dis[v]==dis[u]+1)
{
ans[v]=(ans[v]+ans[u])%mod;
}
}
}
for(ll i=1;i<=n;i++)cout<<ans[i]<<"\n";
}
QAQ