跑Dijkstra的时候顺便记录一下每个节点的最短路径的数目,
if (dist[v] > dist[u] + 1) {
dist[v] = dist[u] + 1;
num[v] = (num[v] + num[u]) % MOD;
q.push(P(dist[v], v));
}
else if (dist[v] == dist[u] + 1)
num[v] = (num[v] + num[u]) % MOD;
如果是新的最短路径,那么到v的路径数目等于到其上一个节点u的路径数目,如果找到一个节点到v...