关于多源BFS
其实就是将要加入的所有点一起加入,可以用很快的时间求出放入的这些点到所有点的最短距离或一些其它的东西,和普通 \(\operatorname{BFS}\) 时间复杂度一样。灵感来自P10289 [GESP样题 八级] 小杨的旅游。
代码大概长这样(在 P10289 的体现):
queue<int>q;
for(int i = 1;i<=k;i++)
{
int x;
scanf("%d",&x);
q.push(x);//将这些传送门一个一个放入
d[x] = 0;//标记这个传送门最近的传送门到自己的距离为0
}
while(q.size())
{
int x = q.front();
q.pop();
for(int v:a[x])
{
if(d[v] == d[0])//由于这个地方没有被算出来(根据BFS的性质,算过了如果再算一遍肯定会比原来的更差)
{
q.push(v);
d[v] = d[x]+1;//计算
}
}
}

浙公网安备 33010602011771号