题目:最短路计数
思路:
bfs时同时维护次数。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000000
#define read(x) scanf("%d",&x)
int n,m;
vector<int> a[maxn+5];
int dist[maxn+5],cnt[maxn+5];
queue<int> que;
void bfs() {
que.push(1);
dist[1]=1;
cnt[1]=1;
while(!que.empty()) {
int h=que.front();
que.pop();
for(int i=0;i<a[h].size();i++) {
int y=a[h][i];
if(!dist[y]) {
dist[y]=dist[h]+1;
que.push(y);
}
if(dist[y]==dist[h]+1) {
cnt[y]=(cnt[y]+cnt[h])%100003;
}
}
}
}
int main() {
read(n),read(m);
for(int i=1;i<=m;i++) {
int x,y;
read(x),read(y);
a[x].push_back(y),a[y].push_back(x);
}
bfs();
for(int i=1;i<=n;i++) printf("%d\n",cnt[i]);
return 0;
}