图论:最短路
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
HDU 2680 Choose the best route 最短路、Dijkstra、多源化单源最短路
最短路有多个起点, 设为 g[0][i] = 0, 这样Dijkstra的 dist[i] 表示的是0 到 i的最短路径,并且这样一设置 0 - 那些起点的路径长度就是0了,所以就当作起点是0, 化为了单源最短路所以跑一遍Dijkstra就好了原创 2016-07-26 01:20:47 · 1134 阅读 · 0 评论 -
Codeforces Round #372 (Div. 2) D. Complete The Graph 图论、最短路、Dijkstra、路径、分配部分边权
图论、最短路、Dijkstra、路径、分配部分边权首先去点2种不可能的情况:1、不记录w == 0 的边的情况下,求出dis[e], 如果 dis[e] < L, 则 w == 0 的边无论怎样分配权值,src 到 e 的最短路 都是这个 dis[e], ans = “NO";2、把w == 0 的边赋值为1,然后把这些 w == 0的边记录下来,跑一边 Dijkstra,如果 dis[e] > L, 则 由于 w > 0 即 w >= 1, 则无论怎样dis[e] 都大于 L, ans = ”NO“原创 2016-09-23 19:07:27 · 1630 阅读 · 0 评论 -
SGU - 465 Fire Station Building floyd+三分
题意:有n个城市m条双向边,计划在一条道路上建立一个消防局,并且它离城市的距离不能小于R,每个城市i有一个发生火灾的概率pi,要求找出最优的地点,是出警需要的期望路程最小。floyd+三分di表示消防局和j点的最短路程,则期望的路程是 sigma{di * pi},所以枚举每一条可能可以设立消防局的边,然后在这个边的可行区域内进行三分,(这里二分应该是不行的,因为效果并不单调,而是呈现成凹函数)对于当前位置x,边是(u, v),则 di = min{x + dist[i][u], w[u][v] -原创 2017-03-20 22:21:59 · 896 阅读 · 0 评论 -
Codeforces Round #408 (Div. 2) D. Police Stations 最短路、BFS
题意:有一棵无根树,有一些节点上有一些标记(police station),初始时满足,每个节点至少 与一个被标记过的节点相连且距离不超过d,要求去掉尽可能多的节点,使剩余的图依然满足,每个节点至少 与一个被标记过的节点相连且距离不超过d。最短路、BFS本来用dfs写了一发,后来发现很多情况下会重复去掉边。用BFS来做比较好,从所有的被标记过的节点开始BFS,当接下来的边会导向已经访问过的节点时把这条边减去,否则放入队列。这样每个节点都会与一个被标记过的节点直接或间接的相连,且距离不超过d。最终会原创 2017-04-13 19:38:48 · 756 阅读 · 0 评论 -
UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造
给出一个大小为n的集合S,集合里有n个互不相同正整数.有q个询问,每次询问是否能选择S中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),使它们相加的和为m.Dijkstra+构造对于S集合中的数,例如a1,考虑到如果x能够被表示出来,那么x+a1也一定能被表示出来。故设d[r]为所有模a1余r的数中,能被表示出来的最小的数。故可以表示出一个a1个节点a1*n条边的有向图。d[0] = 0,丢入priority_queue<ii, vector<ii>, greater<ii>>原创 2017-05-28 15:10:59 · 1661 阅读 · 0 评论 -
UESTC 1639 云中谁寄锦书来?雁字回时,月满西楼。 Dijkstra拓展
题意:在n个点m条边的无向图上,有k个出口从起点出发,每到一个点(包括起点),该点连出的边中有d条会被封锁,求最坏情况下到达出口的最短路。Dijkstra拓展由于求最坏情况下的最短路,对于每个点,显然最优的前d条边不能走。对于边u->v,必然要先得到v到出口的最坏情况下的最短路才能得到u经过该边再到出口的最坏情况下的最短路,也就是该边对于u的价值,所以要从出口往回考虑。令f[i]表示i到出口的最坏情况下的最短路,同dijkstra算法一样,每个点i可以分为f[i]已确定的和f[i]未确定的初始原创 2017-05-28 15:55:13 · 1144 阅读 · 0 评论 -
计蒜之道 2017 程序设计大赛 - 计蒜客 复赛 D 百度地图导航 最短路、Dijkstra的拓展
题意:有 n 个点,编号依次为 1 到 n,且有若干个点的集合,编号依次为 1 到 m。每个点集合包含一个或多个点;每个点可能属于多个点集合,也可能不属于任何点集合。图中中有两种边。第一类边是点u,v 之间权值为ci的无向边;第二类边是点集合之间的无向边,连接两个点集合 a,b,通过这条边,城市群 a 里的每个点与点集合 b 里的每个点之间有一条权值为 w 的无向边。求从点s 到点 t 的最短路。最短路、Dijkstra的拓展这里n+m是4e4所以很可能只能用O(nlogn)的算法,所以可以用Dijk原创 2017-06-11 18:49:50 · 854 阅读 · 0 评论 -
Gym - 100781A Adjoin the Networks 无向图的直径、连通性
题意:给出一个有c个节点e条边的无向图,求添加尽可能少的边使得图连通,并且图的半径(所有点对的最短路径的最大值)尽可能小。无向图的直径先把每个连通块的直径求出来,//这里求直径的方法是 先随机选一个点然后找出距离这个点最远的点,然后选取该点x 作为起点,求距离x最远的点,路径dist[x-y]就是该连通块的直径了。然后如果只有一个连通块,那该直径就是最终的直径如果有2个连通块则,可以把他们的终点连起来如果3个及以上,则先把最大的和第二大的连起来,然后后面的都连到最大的那个连通块的直接中点,并且原创 2017-07-21 23:55:06 · 2119 阅读 · 0 评论