最短路
Dan__ge
Today is difficult,tomorrow is more difficult,but the day after is beautiful.
展开
-
HDU 4786 图论之最短路
点击打开链接题意:问有没有一个生成树的权值之和是斐波那契中的值思路:分别求一次最大生成树权值和为max1和最小生成树权值和min1,如果不能生成一个树,直接输出No,不然判断min1到max1中有没有斐波那契数就行了,至于为什么可以,我感觉我队友说的比较有道理,最小生成树可以加一条边然后删一条边生成次小生成树,依次类推,我们可以用次小生成树在生成一个次小次小生成树,一直可以推到最大生成树,原创 2016-03-29 19:52:41 · 587 阅读 · 0 评论 -
HDU 4725 最短路
点击打开链接题意:给定n个数,m条边,c是每一层的连接费用,n个数代表n层,每一个数字在一层中,从一层只能走到下一层或上一层的一个节点,费用为c,现在有m条边连接点,问你从1走到n的最小费用思路:以两层为例,前边一堆的话代表第一层的每个点到第二层的所有点的费用都是c,其他边直接连即可,但是这么连肯定是超时的,所以我们可以每一层建立一个超级源点,这个源点到这层的每一个点费用都为0,而这些点可原创 2016-10-09 20:22:15 · 414 阅读 · 0 评论 -
Vijos 1082 最短路
点击打开链接题意:中文思路:直接跑两遍最短路,然后将所有可以用的边全部找出来,然后在跑一遍最短路求出最短时间即可#include #include #include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3原创 2016-09-13 20:23:17 · 591 阅读 · 1 评论 -
POJ 3114 强联通分量+最短路
点击打开链接题意:给n个点,和一个有向图及边权,若两个点可以相互到达,则他们之间的费用可以为0,然后K个询问,问U到V的最小费用思路:可以相互到达的费用为0,那么直接强联通缩点就行了,然后问最短路,因为询问K最多100,所以可以直接dijkstra一次一次的判断就行了#include #include #include #include #include #include #i原创 2016-08-17 14:59:36 · 474 阅读 · 0 评论 -
HDU 3526 最小割
点击打开链接题意:有两个公司分别提供的n个部件,每个部件的价格给出,现在要这买n个部件,我可以选择两个公司中的任意一个,但是对于下面给的m个关系来说,若满足i与j不再同一个公司,那么就要加上c的费用,问买n个部件的最小花费思路:刚刚读完题的时候感觉像是最小费用流呐,流量就是5呗,然后根据关系建图,画了一会也画不出来,看了一下正解竟然是最小割,思想到时很简单,但是思路不对的话还是很难想到的,原创 2016-06-23 18:39:03 · 1775 阅读 · 0 评论 -
HDU 5361 最短路变形
点击打开链接题意:给了n个点排成一行,每两个距离为1,然后对于每个点来说它有个L和R,意思是距离在L到R中间的所有点它都能到达,费用是C,问从小出发的单源所有的点的距离思路:看了网上神犇的题解有了点思路,因为每个点出去的费用都是相同的,而且费用的值大于0,那么1点直接到达的所有点的最短路就不需要在更新了,因为剩下的肯定是比它大的,那么对于这些个点我们压入队列,但是注意我们这里的dis设定为原创 2016-07-07 20:05:12 · 1919 阅读 · 1 评论 -
ACdream 1415 最短路+桥
点击打开链接题意:给个图,问你从1到n的最短路的路径上,有多少桥思路:先是要满足条件最短路,然后判断每条边是不是最短路里的边,怎么判断也很简单,先从1开始求最短路和从n开始求最短路,对于边U到V来说,若1到U的最短路加上n到V的最短路在加上这条边的权值若等于1到n的最短路,那么这条边就是我们要的,就是这个条件if(dis1[U[i]]+COST[i]+dis2[V[i]]==maxdis|原创 2016-06-19 15:13:05 · 1686 阅读 · 0 评论 -
HDU 3499 分层图最短路+Trie树
点击打开链接题意:给n个城市和m条无向边,然后给了起点和终点,然后你有一次机会使得其中的一张票价减半,问最小花费是多少思路:明显是裸的分层图嘛,而且层数就只为2比较简单,但是注意的是城市的名字之类的,我用的Trie树来处理的,RE了几次,每组过后将Trie树释放就好了,然后注意那个减半的价钱是直接/2,WA了几次加了1除以的2,o(︶︿︶)o 唉#include #include #i原创 2016-06-18 14:17:14 · 2188 阅读 · 0 评论 -
NEFU 1132 分层图最短路
点击打开链接题意:给出起点和终点,然后有k次机会使得路径上的某些路径的值减半,问从起点到终点的最小花费思路:很明显的分层图最短路嘛,自己也没有去研究算法的含义,队友和我说就是将图分成了n层,然后将这个可以减半的费用连接这n层,然后跑个类似的最短了就可以了,今天改了一个模版,改成了自己喜欢的风格,明天在做几道分层图在看看概念把,这题就是个模版题#include #include #inc原创 2016-06-17 21:26:47 · 2724 阅读 · 0 评论 -
HDU 3599 最短路+最大流
点击打开链接题意:给n个地点及许多边,现在问你要用最短时间内有多少种不相交的最短路思路:因为要的是最短路上的边,所以先跑最短路将满足的边全部拿出来建网络流的图,然后在跑个最大流就行了因为一条边只能用一次,所以网络流就行#include #include #include #include #include #include #include #include using n原创 2016-07-13 19:38:58 · 1642 阅读 · 0 评论 -
Google Spaceship Defence 面试题目 并查集+最短路
点击打开链接题意:给了n个地点,然后每个地点的名称,若名称相同则可以认为这两个地点距离为0,下面m个关系代表两个地点的距离,有向的边,q个询问,两个点的距离,想做的密码是nefu思路:简单的最短路题目,因为有相同的点,可以用并查集将这些点放到一个集合中,然后建图建的就是父节点就行了,找相同关系我用的Trie树,但是map应该也可以直接做,没用过map只能写Trie树了,剩下的就是最短路模版原创 2016-06-02 10:40:16 · 1042 阅读 · 0 评论 -
POJ 2449 第K短路模版题 A*+最短路
点击打开链接题意:求S到T的第K短路的长度思路:学习了一些A*的性质,f(v)=d(v)+h(v);d是初始状态到v的距离,h是v到目标状态的距离,而在求第K短路是我们将h定义为到目标状态的最短距离,而我们利用优先队列将f小的先出队列,这样在跑A*的时候,首先到达目标状态的距离肯定是最短距离先到达,而我们要的是第K短的,所以我们将第K次出队列的目标状态的f输出就是我们要求的,特殊的是当S=原创 2016-04-11 19:52:26 · 1568 阅读 · 0 评论 -
AOJ 2249 图论之最短路
点击打开链接题意:给了一些边,现在要你删除其中一些边,使1到其他位置的最短距离不变,但是费用要最小思路:用dijkstra求最短路,在更新路程距离时将费用更新即可,代码中有注释#include #include #include #include #include #include #include using namespace std;typedef long long原创 2016-03-28 18:24:00 · 1052 阅读 · 0 评论 -
HDU 4081 次小生成树变形记
点击打开链接题意:n个点用n-1条边连起来,问两个点的人口A除以总的距离减去这两点的距离的最大值,表达能力有限,看看别人怎么翻译的吧,但是代码还是不错的......思路:用到的是次小生成树中的记录i->j的最大距离,然后枚举每条边,因为已经求出了最小生成树,所以如果你加入这条边后,肯定会形成一个环(画图会有奇效),然后我们减去这个环的最大值,就可以保证B最小,遍历所有边后,输出最大值,而且原创 2016-03-22 19:56:32 · 1098 阅读 · 0 评论 -
HDU 5137 数据结构之最短路
点击打开链接题意:给出一系列的关系图,每两个人求对方办事会花费多少钱,1要将儿子送到n那去读书,利用这些关系来完成,但是你和1有矛盾想让他完成不了,你有一个权利让其中一个人不做这些事,除了1和n之外的其他人都会答应你,如果1不能完成则输出Inf,不然输出,他要花费的最大价值思路:用最短路完成,遍历2~n-1这些点,将他们标记后就不能在使用,然后求最短路,如果走不到n,则输出Inf,不然我们原创 2016-03-22 16:03:34 · 876 阅读 · 0 评论 -
hdu 5294 最短路+最大流
点击打开链接题意:题目要求1走到n的路程为最短路的路径,但是路径可能有多个,都要用,如果不是最短路径上的边就不走它了,第一个结果是问最少删除几条边1走不到n,第二个是最多删除几条边后,1仍能够走到n思路:我们要先求出最短路,并将路径上的边挑出来,然后建图,此时的图流量和时间都是1,因为最后的时候我们只要的是边的个数,这样求最小割=最大流就是第一个答案,然后求最短路ans[n],用总变数m减原创 2016-04-04 16:21:39 · 1335 阅读 · 0 评论 -
codeforces 716D 最短路
点击打开链接题意:给一个图,其中边权为0的边是需要更改的边,更改后的值为正数,且最短路的长度为L,问其中一种合法的分配方法思路:对于边权为0的边,先不管然后跑最短路,若最短路的长度小于L,则无解,若长度等于L,则将0边变为inf输出即可,最后一种情况就是依次将0边变为1边,然后跑最短路,若当前的最短路值小于等于L,说明已经有一种情况满足了,其它的没有走过的0边就是inf,之前走过的变为1,原创 2016-10-24 19:42:02 · 584 阅读 · 0 评论