1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e5+10,M=4e5+10,P=100003; struct edge{int x,y,pre;}a[M];int alen,last[N]; void ins(int x,int y){alen++;a[alen]={x,y,last[x]};last[x]=alen;} int read() { int x=0,f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()){if(ch=='-')f=-1;} for(;isdigit(ch);ch=getchar()) x=x*10+ch-48; return x*f; } int n,m,d[N],v[N],g[N]; void dijkstra() { priority_queue<pair<int,int> > q; memset(d,0x0f,sizeof(d));d[1]=0; memset(g,0,sizeof(g));g[1]=1; memset(v,0,sizeof(v)); q.push({0,1});v[1]=1; while(!q.empty()) { int x=q.top().second;q.pop();v[x]=0; for(int k=last[x];k;k=a[k].pre) { int y=a[k].y; if(d[y]>d[x]+1) { d[y]=d[x]+1; g[y]=g[x]; if(v[y]==0)q.push({-d[y],y}),v[y]=1; } else if(d[y]==d[x]+1) { g[y]=(g[y]+g[x])%P; } } } } int main() { n=read();m=read(); alen=0;memset(last,0,sizeof(last)); for(int i=1,x,y;i<=m;i++) { x=read();y=read(); ins(x,y);ins(y,x); } dijkstra(); for(int i=1;i<=n;i++)printf("%d\n",g[i]); return 0; }
- 1
信息
- ID
- 1040
- 时间
- 100ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 50
- 已通过
- 29
- 上传者