/* 返回顶部 */

随笔分类 -  图论——————Dijkstra

摘要:暴风城 没想到INF爆int卡了我一个月... 求收取费用最多的一次的最小值,显然是要用二分答案。 二分这个最大费用,每次用dijkstra求一下不经过收取费用大于二分值的城市的前提下的最短路, 并判断这个距离是否在血量范围内。 代码如下 #include<cstdio> #include<iost 阅读全文
posted @ 2019-05-31 01:02 Mogeko 阅读(156) 评论(0) 推荐(0)
摘要:传送 分层最短路。 可以发现,需要做出选择的地方只有地铁站,所以点集就是所有地铁站。 所有相同x坐标地铁站之间纵向连边,点编号1~n,y相同地铁站之间纵向连边,编号n+1~2n, 边权为x或y坐标差值*2。 在每个地铁站可以选择换乘或者不换乘,如果换乘,花费为1,坐标由i变成i+n(或i-n)。 所 阅读全文
posted @ 2019-05-22 14:55 Mogeko 阅读(230) 评论(0) 推荐(0)
摘要:传送 gg给的题解 这道题的k很小,把k看作一种状态,可以考虑用分层的方法解决。 把每个点分成k个,dis[x][k] 代表使用了k次免费机会,到达x的最短距离。 从u到v,可以不使用免费机会,费用为val,或者使用免费机会,边权为0。 那么连边的时候,每条边实际要连2*(k+1)条:(i = 0~ 阅读全文
posted @ 2019-05-21 20:34 Mogeko 阅读(182) 评论(0) 推荐(0)
摘要:qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > 阅读全文
posted @ 2018-11-30 22:00 Mogeko 阅读(238) 评论(1) 推荐(0)