#include "../template/const_value.cpp"
#include "definition.cpp"
template<typenameedge_t,typenamecost_type=typenameedge_t::cost_type>std::vector<cost_type>bfs01(constgraph_t<edge_t>&g,ints){static_assert(std::is_integral<cost_type>::value,"cost must be integer");std::vector<cost_type>d(g.size(),inf<cost_type>());d[s]=cost_type(0);std::deque<std::pair<cost_type,int>>que;que.emplace_back(zero<cost_type>(),s);while(!que.empty()){autotop=que.front();que.pop_front();cost_typedist=top.first;intv=top.second;if(d[v]<dist)continue;for(constauto&e:g[v]){if(d[e.to]>d[v]+e.cost){d[e.to]=d[v]+e.cost;if(e.cost==cost_type(1)){que.emplace_back(d[e.to],e.to);}elseif(e.cost==cost_type(0)){que.emplace_front(d[e.to],e.to);}else{assert(false);}}}}returnd;}