【图论】BFS
当边权为某个定值w时,可以直接把最短路改为经过w边几次,那么可以用bfs。
namespace BFS {
const int MAXN = 3e5 + 10;
int n;
vector<int> G[MAXN];
int dis[MAXN];
queue<int> Q;
void bfs(int s) {
fill(dis + 1, dis + 1 + n, INF);
while(!Q.empty())
Q.pop();
dis[s] = 0;
Q.push(s);
while(!Q.empty()) {
int u = Q.front();
Q.pop();
for(int &v : G[u]) {
if(dis[v] <= dis[u] + 1)
continue;
dis[v] = dis[u] + 1;
Q.push(v);
}
}
}
}
也可以用01BFS,当边权为0或者某个定值w时,可以直接把最短路改为经过w边几次,那么可以用双端队列优化的bfs,当使用的边权值为0时,插入队首,否则插入队尾(或者直接用两个队列,有些检索那个代表距离为0的队列)