/*
[使い方]
まず始めに、グラフGを頂点数nで初期化して辺を追加する
G.resize(n);
G[a].push_back(b);等
次に最短距離を格納する、長さが頂点数で初期値-1の配列を用意する
vector<long long> distance(n,-1);
最後にXとstartを決めて幅優先探索を実行する(Xの条件が必要ないなら適当にn+1とかを入れる)
bfs(distance,10,0);
配列に最短距離が格納される(到達できないときは-1のまま)
*/
vector<vector<long long>> G;
//始点startからX回以内の移動でたどりつける頂点の最短距離を求める(到達できないなら-1)
void bfs(vector<long long> &dist, long long X, long long start)
{
queue<long long> que;
dist[start] = 0;
que.push(start);
while (!que.empty())
{
long long v = que.front();
que.pop();
if (dist[v] == X)
continue;
for (auto next_v : G[v])
{
if (dist[next_v] != -1)
continue;
dist[next_v] = dist[v] + 1;
que.push(next_v);
}
}
}