小镇购物 [ bfs ]
题目描述
CSU镇上有n个商店,n个商店有m条双向小路相连,在这n个商店里共有k种不同商品,每个商店只有一种商品,每条路的权重都为1。现问你从每个商店出发,买够k种商品中的s种商品所需的最小代价,每个商店可以同时派出多个人买不同商品,买够即可。
输入格式
1 | 输入包含多组测试用例。 |
输出格式
1 | 输出n个数字,第i个数字代表从商店i出发买够s种商品所需的最小代价。 |
输入样例
1 | 5 5 4 3 |
输出样例
1 | 2 2 2 2 3 |
很明显是道 bfs , 但是要跑 n 遍 bfs ? 考虑到数据 1e5 ,显然要超时的。。多源 bfs 常见处理就是,把一些点一起压入队列跑 bfs,避免频繁跑 bfs。题目要求的是,每一个点跑够 s 个不同的商品,点很多,而商品很少,所以可以先求每个商品到各个点的最小距离,这样一次可以将多个点(同商品)压入队列中,符合上面提到的处理方法。
1 | const int MAX=100000+10; |