【图论】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的队列)

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号