01bfs
这个实际上是一种求最短路的东西。是在边权只有 0 或 1 的有向图上求单源最短路。看起来很没用,但是相对好写。
其基础是双端队列。想法是由于边权只有 0 或 1,那么边权为 0 的边一定比边权为 1 的边更优(松弛没有代价),因此就放到前面先跑。复杂度 \(O(m)\)。
可能有点拓展性?比如说开值域个队列之类的。那实际上好像与 dij 等价。实际上这个好像就是一个小号的 dij。
#define pii pair<int,int>
int s;
void bfs(){
for(int i=1;i<=n;i++)dis[i]=inf;
deque <int> t;dis[s]=0;t.push_front(s);
while(!t.empty()){
int u=t.front();t.pop_front();
for(pii tmp:q[u]){
int v=tmp.first,w=tmp.second;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if(w)t.push_back(v);
else t.push_front(v);
}
}
}
}

浙公网安备 33010602011771号