![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
bfs
timidcatt
永远不要放弃战斗
展开
-
B. 看比赛 The 10th Jimei University Programming Contest
思路:因为直走最短路,所以我们把所有在最短路上的边都要选出来,建成新图,为此,首先用dijkstra求出1到n的最短路的长度,然后我们从n开始bfs,遍历相邻边,如果这条边的边权加上1到这条边起点的最短路距离等于1到这条边终点的最短路距离,那么就把这条边加到新图中,最后就会形成一个包含1到n的所有最短路的DAG。原创 2023-10-26 19:48:50 · 270 阅读 · 3 评论 -
H. Mad City Codeforces Round 898 (Div. 4)
所以我们先跑一个dfs找到所有环上的点,然后再以b为起点,找到b距离环上的哪个点最近,且是哪个点,然后再从a出发跑bfs找到b到那个点的距离,如果b一开始就在环上且到那个点比a更近,就有必胜策略,同时如果ab重合一定没有必胜策略。题目大意:有一个n个点的图,有n条边,西安有两个人A,B分别位于点a/b,每轮两个人同时开始向相邻点移动,问B有没有可能永远不和A汇合。思路:如果要永远不汇合,那么他们最终肯定在一个环里,而边的数量等于点数,说明图中有且只有一个环,那么B只要比A先到这个环即可。原创 2023-10-19 15:39:49 · 156 阅读 · 0 评论 -
F. Minimum Maximum Distance Codeforces Round 903 (Div. 3)
如上图,从4出发找到最远的点2,但右边的5距离2更远,这时候因为2已经是最靠左的一个点了,所以只要再从2再跑一遍bfs,找到的最远的点和2一定是距离最远的两个点,类似于问以哪个标记点为根,能找到根到标记点的最远距离。显然,在标记点2、4之间的点是才可能是取得最小值的点,因为如果在某一个点一段的话,这个最大值一定大于两个标记点之间的距离,而在中间的点一定都是小于这个距离的,那么在这两个点之间很显然最中间的点是取得最小值的点。原创 2023-10-17 16:38:28 · 179 阅读 · 0 评论 -
Grayscale Confusion “范式杯”2023牛客暑期多校训练营10 L
题目大意:有n个三维三维向量,c[i]=(x,y,z),定义c[i]原创 2023-08-19 12:27:41 · 145 阅读 · 0 评论 -
G. Rudolf and CodeVid-23 codeforces1846G
思路:可以发现s和一对字符串操作,就相当于s&(~e1)|e2(可以用真值表推导),因为字符串的位数最高是10位,也就是说无论怎么操作,最多出现1024个不同的字符串,所以我们可以把每个不同的字符串当做一个节点,先用bitset把字符串都转化为数字,然后每一对字符串作为边,用set来做bfs的队列,从起点开始,将set中的每个点都用上面的到的公式与每对字符串进行操作,如果到新的的距离小于之前记录的距离,就更新这个最短距离,最后队列为空后输出到0点的距离即可。原创 2023-07-11 15:52:47 · 238 阅读 · 0 评论 -
E. Between codeforces 1816E
最后输出整个金字塔,每次输出都是从上到下。规则3:对于所有数对(a,b)在数组中每两个等于a的数中间至少有一个b。1原创 2023-04-18 14:34:34 · 74 阅读 · 0 评论 -
2022CCPC 广州 C. Customs Controls 2 codeforces104053C
思路:我们发现,对于每一个有多条入边的点,所有到该点的父结点的路径长度应该相等,这样到达该点的所有路径长度就都是相等的,那么我们可以把这样的点的所有父结点用并查集缩点,然后构建新的图,再重新判断这个图是否是无环图,同时,如果两个点有相同的子节点,但这两个点之间也有连边的话,也是没法使所有路径长度相等的,然后找出1到每个点边权为1时的最长路,也就是到每个点最多要经过多少个点,然后让每一条到n的路的点权和都等于到n的最多点数即可,也就是对于每两个节点u,v 令v的点权等于到v的最长路-到u的最长路。原创 2022-11-19 14:55:16 · 462 阅读 · 0 评论 -
hdu 1233 还是畅通工程(prim)
思路:prim算法的思路与dijkstra类似、创建一个集合,将源点放入集合,然后找离集合中的点相连的权值最小的边,并将该边连接的另一个点放入集合,重复此过程直到所有点都被放入了集合,用优先队列优化可以使时间复杂度为O(mlogn),相比kruskal的O(mlogm+m),更适合用于稠密图。题目大意:有n个点构成的图,有n*(n-1)/2条边,求最小生成树上的权值和。原创 2022-11-15 20:21:15 · 125 阅读 · 0 评论 -
F. The Beach codeforces1754F
我们考察每个'.'能够去的位置,如果是平移的话,如果'.'的右边是'L',那么让'LR‘向左移就可以使得这个'.'向右移两格,移到原来'R'的位置,花费为q,同理,如果左边是'R',上边是'D',下边是'U'的话,同样也可以使'.'向对应方向移两格。然后考察旋转,如果上面或下面是'L',那么我们可以将'.'移到原来'R'的位置,即移到右上或右下,如果上或下面是'R',那么可以移到左上或左下,如果右边或左边是'U’,可以移到右下或左下,如果右边或左边是'D',可以移到左上或右上,费用为q。原创 2022-11-14 20:09:14 · 218 阅读 · 0 评论 -
迷宫问题 poj3984
思路:创建一个队列,首先令起点入队,然后对于每个相邻的能走的且点,放入队列,然后记录下一个点的路径值为当前点,直到遍历到终点,对于结果的输出,从终点开始遍历路径数组,将所有点存入栈中,然后再依次从栈中取出即为要求的顺序。题目大意:有一个4*4的迷宫,0代表能走的格子,1不能走,要从点(0,0)到(4,4),求最短路径。原创 2022-09-27 14:54:15 · 308 阅读 · 0 评论