luogu P1144 最短路计数

mac2022-07-05  11

#include <iostream> #include <cstdio> #include <queue> using namespace std; int read () { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); } return f*x; } const int N=1e6+5,M=2e6+5,mod=1e5+3; int n,m,dis[N],ans[N],had[N],to[M*2],nxt[M*2],p,a1,b1; void add(int x,int y) { nxt[++p]=had[x]; to[p]=y; had[x]=p; } void bfs() { queue <int> que; que.push(1); while(que.size()) { int u=que.front(); que.pop(); for(int i=had[u];i;i=nxt[i]) { int v=to[i]; if(!dis[v]) { dis[v]=dis[u]+1; que.push(v); } if(dis[v]==dis[u]+1) ans[v]=(ans[v]+ans[u])%mod; } } } int main() { n=read(); m=read(); for(int i=1;i<=m;i++) { a1=read(); b1=read(); add(a1,b1); add(b1,a1); } ans[1]=1; bfs(); ans[1]=1; for(int i=1;i<=n;i++) cout<<ans[i]<<"\n"; return 0; }

 

最新回复(0)