01BFS
辺の重みが$0,1$のどちらかであるようなグラフで,頂点$s$からの最短距離を効率よく求めるアルゴリズム.
計算量
$O(V+E)$
ソースコード
struct Edge{
int from;
int to;
long cost;
};
using Graph = vector<vector<Edge>>;
/*01BFS*/
void bfs01(Graph &G,int s,vector<long>&dist){
int n = G.size();
dist.assign(n,INFl);
deque<int> que;
dist[s] = 0;
que.push_back(s);
while(!que.empty()){
int v = que.front();
que.pop_front();
for(auto &e:G[v]){
if(dist[e.to] > dist[v] + e.cost){
dist[e.to] = dist[v] + e.cost;
if(e.cost == 0){
que.push_front(e.to);
}else{
que.push_back(e.to);
}
}
}
}
}