题目链接
题目类型:补图的最短路
题目来源:2016 ACM/ICPC Asia Regional Dalian Online
题目分析
题目大意
给出一张图,问对于指定起点该图的补图中起点到每一个点的距离。其中补图的定义为,将原图中的所有边都去掉,原图中两点之间如果不存在边则添加这条边,存在边则不添加,形成的图
解析
很容易想到是BFS,如果原图中和起点相连,那它们两者之间的距离必然不是1,如果两者之间没有边直接相连,那么补图中两者之间的距离就是1,然后我们对于每次新加入进来的点进行BFS,但是问题是,点的数量很大,如果暴力的去扫肯定会T掉,在这里灵活的运用了set这种数据结构,一开始先存储所有未加入补图的点,对于每一个队首元素,可以将未加入补图的点分为两部分,一部分是可以直接加入补图,也就是说在原图中和队首元素不相连的点,一部分是不能直接加入补图,也就是说在原图中和队首元素相邻的点。每次将新加入补图的点入队,然后重复执行这个过程,就可以保证到每一个点的距离都是最小的。
代码
1 |
|