[洛谷P1144]最短路计数
题目大意:给你一个无权无向图,要你求出1到其他所有节点的最短路的条数
题解:bfs,每次查到一个节点就把该节点的ans值加上它父节点的ans值
C++ Code:
#include<cstdio> const int mod=100003; using namespace std; int n,m; int ans[1000100],step[1000100]; int head[1000100],cnt; struct Edge{ int to,nxt; }e[2000100<<1]; int q[1000100],h,t; void addE(int a,int b){ e[++cnt]=(Edge){b,head[a]}; head[a]=cnt; } int main(){ scanf("%d%d",&n,&m); for (int i=0;i<m;i++){ int a,b; scanf("%d%d",&a,&b); if (a==b)continue; addE(a,b); addE(b,a); } q[t=step[1]=1]=ans[1]=1; while (h<t){ int x=q[++h]; for (int i=head[x];i;i=e[i].nxt){ int to=e[i].to; if ((!step[to])||(step[x]<step[to])){ if (!step[to])q[++t]=to,step[to]=step[x]+1; ans[to]=(ans[to]+ans[x])%mod; } } } for (int i=1;i<=n;i++)printf("%d\n",ans[i]); return 0; }