最短路径 差分约束
文章平均质量分 73
zxy_snow
这个作者很懒,什么都没留下…
展开
-
zoj 1721 || poj 1556 The Doors
这题就考建图的。从0,5到10,5,建图建好了,用最短路算法就很简单了。关键判断两个点是否可以相连,因为可能这俩点中间有墙,就不能连了。判断很好想,但是写着稍微麻烦点,不过数据挺小的。代码注释的有,直接判断连线在x下的y坐标是否在墙上,如果在墙上,就不能连。结构体里的p数组开小了 T T 。。。WA了许久,查到这个错误费了好长时间。。。 T T。。zoj300了^ ^#include <queue>#include <stack>#include <math.h>#include <stdio.原创 2011-04-03 18:32:00 · 1319 阅读 · 0 评论 -
zoj 2887 || poj 3439 Server Relocation
<br />哎,开始没理解清题意,后来想明白了^ ^。不难~<br /> <br />给你一个服务器,服务器有两条电线,电线长度给你了,墙上有好多个插座,问你从插座A移动到插座B最少要几步(移动的时候,服务器不能断电,也就是,至少有一条电线连着插座,服务器可以任意动)。<br /> <br />开始理解错误了,这个蛮简单的,只要俩插座之间的距离大于两条电线的总长度,就不予考虑。然后建图后,求最短路,或者用BFS也可以,求最小次数即可。<br /> <br />#include <queue>#inclu原创 2011-04-02 18:48:00 · 1352 阅读 · 0 评论 -
zoj 2864 Catch the thief
<br />WA了五版,贡献了50、60次WA。。。我成功地把这个题的AC率降低了好几个百分点。。。伟大吧。。<br /> <br />纠结两天多了><。<br /> <br />废话不多说了,总之,还是道好题的。<br /> <br />说下题意,给你一个图,无向图,有起点,终点,给出q个询问,询问在时间t的时候,小偷可能在哪几个地点。小偷是沿最短路从起点逃到终点的。<br /> <br />因为最短路可能有多条,所以造成同一时间,小偷所在地点不同。<br /> <br />最短路后,然后找所有的最短路径原创 2011-04-01 16:23:00 · 1367 阅读 · 5 评论 -
zoj 1519 || poj 1292 Will Indiana Jones Get There?
这题做了好久, T T。。。昨晚雏形都了,不过有BUG,昨晚用手机查到了个BUG,挺高兴的,今天中午乐呵呵地来调。。。下午第一节课听说课,逃了,调到第二节课快开始还没调完T T。。。去上了一小节课,回来继续调。。。继续找bug。。。BUG无限啊。。忽然发现dijkstra中似乎不用让起点入队,改掉之后,变成SF了。。无语啦,似乎是队列空的时候还取top()了,测试了一下,果然是。就把最外层循环改成队列不为空了。想了想,因为这个里面不是纯的最短路,所以有可能内层循环结束也不一定有一个会入队 = =。。。队列里原创 2011-03-29 18:10:00 · 1369 阅读 · 0 评论 -
ural 1085. Meeting
<br />这题,初看没什么思路,下午看的时候挺困的,去床上躺了会儿,想通了,水题呀~~<br /> <br />给你几条路线,从一条路线到另一条路线需要重新买票,给出K个人的位置,每个人都需要到达同一个点去,每个人有钱,有的还有月票(月票的话乘车不要钱~)问你到哪个点,总的花费最小,输出位置和最小花费。如果不能到达,输出0。<br /> <br />建图,每条路上任意两点的权为1,然后用floyd找从一个点到另一个点的最短路。然后枚举到达地点即可。<br /> <br />处理月票和是否连通需要注意下。<原创 2011-05-17 22:24:00 · 1067 阅读 · 0 评论 -
ural 1072. Routing
<br />水题啊,不过因为那个AND还百度了下,神马叫IP和子网掩码的按位与 = =。。其实就是IP和子网掩码的每个数字上用&与下,得到最终结果即可。<br /> <br />因为是按位与后结果相同的可以连线建图,我直接把按位与的结果存成一个数字了,得用long long,要不存不下。<br /> <br />然后直接和之前已经存过的结果对比,如果相等就建图。<br /> <br />然后就随意了,用dijkstra求最短路,输出路径即可。<br /> <br />#include <stdio.h>原创 2011-05-16 23:07:00 · 1880 阅读 · 0 评论 -
zoj 1430 || poj 1697 The Erythea Campaign
<br />最短路分类里的,zoj只有50个人过,暴汗,不过应该大多数是被冗长的题目给吓住了吧。<br /> <br />给你地图,图中的1代表这里有根据地,你越靠近根据地,越容易被敌人发现,危险等级越高。不能从根据地中间穿过。<br /> <br />给你起点,终点,求最少的危险等级和使之可以到达,如果没有 输出,no solution。<br /> <br />危险等级是这么定义的,你在某个点,这个点离它最近的根据地的距离为d,那么,这个点的危险等级就是,矩阵的长+宽-d。<br /> <br />我第原创 2011-03-28 18:58:00 · 1244 阅读 · 0 评论 -
poj 3615 Cow Hurdles
<br />分类是网络流里的,结果感觉。。。一看discuss,有人用floyd而且木有超时,那我也用floyd吧。。<br /> <br />map里存的是 i 到 j 点路径上的最大值的最小值哈,判断条件改下就OK了。。。<br /> <br />#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <lim原创 2011-03-06 22:27:00 · 752 阅读 · 0 评论 -
河南省第三届省赛第四题——虚拟城市之旅
题目见百度文库 http://wenku.baidu.com/view/0fce6810f18583d0496459ff.html去年省赛的题目,开始想得挺麻烦的,后来经提醒,直接用最短路求从1能到达N的最大最小值。因为数据量比较大,用了SPFA。SPFA好久没写了,写了半天才写对,纠结啊纠结!!!#include #include #include #include #include #include #define MAX 500010using namespace std;原创 2011-03-04 23:02:00 · 2242 阅读 · 0 评论 -
poj 2983 Is the Information Reliable?
<br />差分约束。<br /> <br />这题只需要说明是否存在环即可。距离确定的点可以用S[a] - S[b] <=len, S[b] - S[a] <= len来建。<br /> <br />然后以0点作为源点求最短路即可,判断是否有环。<br /> <br />我还是SPFA用着比较顺。。。就一直用的SPFA。。。<br /> <br />#include <cstdio>#include <cstdlib>#include <iostream>#include <string.h>原创 2011-02-06 19:38:00 · 883 阅读 · 0 评论 -
zoj 2583 || poj 2679 Adventurous Driving
<br />恶心题过一道就少一道~~~撒花花~~~不让用表情,我随便搜个吧~~chrome的频率好快。。<br /> <br />这题啊,理解题意是件很困难的事情~<br /> <br />先说题意吧,给你起点,终点,边,以及边的长度 和从这边到那边的花费,而且必须走这么一条路。。。即当前点,花费最少的的路,而且最终长度最短的路。如果从s到t上存在负环,输出UNXXXX,如果没有这种路,输出VOID。<br /> <br />关于VOID这个路哈,样例我始终理解不了,就在昨天,突然理解啦!!!哈哈!把不是最原创 2011-04-05 20:38:00 · 1205 阅读 · 1 评论 -
河南省第三届省赛第四题——虚拟城市之旅
<br />展馆是未来城市的缩影,个人体验和互动是不变的主题。在A国展馆通过多维模式和高科技手段,引领参观者在展示空间踏上一段虚拟的城市之旅。梦幻国有N个城市和M条道路,每条道路连接某两个城市。任意两个城市之间最多只有一条道路直接相连。这M条道路中有一部分为单向通行的道路,一部分为双向通行的道路。梦幻国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。现在你已踏上一段虚拟的城市之旅。为了给你一个意外收获,允许你在旅原创 2011-04-24 19:58:00 · 2759 阅读 · 9 评论 -
hdu 4063 Aircraft
相信在比赛的时候看这题的大家,都很无语吧~~!!我是卡了整场了。。。中途看了其他题几眼,又回来这题了。。。我第一个就是看的这个题(因为题目短,而且看着比较顺眼。。。)。。。然后就走向了一条不归路。。。泪。。。第一反应,这不是裸的最短路么,很快敲了个,直接用floyd了原创 2011-10-07 20:18:40 · 3336 阅读 · 6 评论 -
zoj 2546 || poj 2662 || hdu 1142 A Walk Through the Forest
某同学给的题。。。发现这三个OJ都有。。。啊。。我是不是很无聊。。。他给我叙述的是从1到2有多少条最短路。。结果死活不过。。去官网下了数据,发现跑得不对,和他的答案一样,然后我俩就怀疑理解错题意了,囧。。果不其然。。。重点是这句话 He considers tak原创 2011-09-24 22:28:56 · 1403 阅读 · 1 评论 -
最短路各种算法 稠密图 稀疏图 时间分析
分别有下面这几种算法(heap写了好久 T T 。。)其中未注明LIST的SPFA 和 dij 是邻接矩阵的形式。heap是手写的堆,邻接表存图。priority指的是调用C++里的STL。Dijkstra Dijkstr原创 2011-03-23 12:07:00 · 8977 阅读 · 3 评论 -
hdu 3665 Seaside
最短路水题啊 = =。。。临时输出项忘删了,WA了一次 = = 。。。这也算区域赛题目啊。。。这么裸的最短路。。我用的dijkstra,应该用Floyd更划算吧。。。数据这么小。。#include #include #include #include #inclu原创 2011-08-24 08:24:32 · 1143 阅读 · 2 评论 -
zoj 2760 How Many Shortest Path
好早以前就见了,一直也没做。昨天才做过一个类似的,今天不想做题。。。看会升刚过这个。。。就把这个A了算了。给出邻接矩阵,求从S到T有多少条不相重叠的最短路。太坑了,输入的矩阵对角线不一定都是0 = =。。。WA死我了建图直接和上题一样,不多说了。#incl原创 2011-09-08 16:40:46 · 1783 阅读 · 1 评论 -
sgu 185 Two shortest
求两条最短路,输出路径。直接先跑一遍最短路,然后按照 dis[i] + a[i][k] == dis[k] 建立网络流的边,容量为1。然后跑一遍汇点容量为2的最大流。也就是求得了两条路。然后从原点DFS正向边,DFS一条路径后删掉这条路径,DFS2次,就求得了两条这样原创 2011-09-07 21:35:35 · 1577 阅读 · 0 评论 -
hdu 3986 Harry Potter and the Final Battle
次短路,枚举删掉最短路上每条边,这题是取最大值即可。SPFA比较快。优先队列犯了个比较2的错误。。。用pair没写比较函数。SPFA#include #include #include #include #include #include #include原创 2011-08-31 22:18:41 · 1133 阅读 · 0 评论 -
BZOJ 1579 Revamping Trails
题目链接http://www.zybbs.org/JudgeOnline/problem.php?id=1579某小朋友给的题,无奈不会做。T T。后来一问知道是用动态规划,搜了下,感觉好神奇。两种方法,一种是建立层次图,然后求最短路即可。(这个层次图特点是,把所有可能路径(包括原创 2011-07-17 18:59:20 · 1887 阅读 · 0 评论 -
hdu 3832 Earth Hour
昨天看这题考虑的有点问题了,这题直接用三次最短路然后找三点到某一点的最短路之和的最小值即可。其实不难想的,昨天比赛也没时间想了T T。。。我开始想最短路想错是因为,怕如果有一个圈圈可以覆盖三个点,那么,如果求最短路的话,这个大圈圈岂不是要求3次?岂不是要重复?好好想了想,开始顾虑原创 2011-07-14 20:08:47 · 1105 阅读 · 3 评论 -
hdu 2851 Lode Runner
下午看virtual contest有比赛,我就随便找了个,做的是09年的多校联合训练的题。一看就是最短路啊,脑子一抽,开始写,写完发现题意理解错了T T。。。笨蛋。。。这个是,每条路给了横坐标,然后他只能往前走,也就是只能从x坐标小的走到x坐标大的。可以覆盖的路可以跳过来。因为原创 2011-07-12 17:13:18 · 837 阅读 · 0 评论 -
poj 3159 Candies
<br />差分约束。<br /> <br />需要优化,SPFA+queue TLE了 = =。。。SPFA+stack 700+MS,Dijkstra + priority_queue 500MS..<br /> <br />以前没用过栈,记得就用过一次WA了,以后再也没用过。这次就把队列改成栈,Q.front() 改成Q.top()就过了,仰慕啊。。。<br /> <br />用邻接表越来越顺啦,(*^__^*) 嘻嘻……<br /> <br />这题是建图后求1到N的最大距离。以1为源点。建图后求最原创 2011-02-06 19:06:00 · 1620 阅读 · 2 评论 -
poj 3169 Layout
<br /> <br />差分约束 SPFA。<br /> <br />如果有环,输出-1,如果N可以无限远,即1与N不连通,输出-2,其他情况输出1与N的最大距离。<br /> <br />按小于等于建图后求最短路即可。<br /> <br />#include <cstdio>#include <cstdlib>#include <iostream>#include <string.h>#include <queue>#include <limits.h>#define MAX原创 2011-02-06 17:53:00 · 2087 阅读 · 1 评论 -
zoj 2770 Burn the Linked Camp
<br /> <br />差分约束第一题。<br /> <br />这个是我这两天对差分约束的理解,http://blog.csdn.net/zxy_snow/archive/2011/02/06/6173375.aspx<br /> <br />这个题见http://www.cnblogs.com/sysuwhj/archive/2011/01/26/1945786.html<br /> <br /> <br />设x[i] 为第i个营的人数,s[i] = x[1] + x[2] + … + x[i],原创 2011-02-06 17:47:00 · 1651 阅读 · 1 评论 -
zoj 2526 FatMouse and JavaBean II
<br /> 这道题纠结了好久,很郁闷,还是题目没读好!<br /> <br />要求的是,找出路径最短的,豆子最多的。参考党的,用了两个DIJ,刚开始我试着用一个DIJ,很纠结也没弄出来,哎。<br /> <br />我悲剧的最短路径,还有五道题呀。。。我晕<br /> <br />#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <limits.h>#define N 520int n,m,start,e原创 2010-09-06 15:53:00 · 960 阅读 · 0 评论 -
zoj 1942 || poj 2253 Frogger(继续DIJ。。)
<br />求青蛙GG能跳到青蛙MM路线上的最小跳。。。<br /> <br />与1952很雷同很雷同。。<br /> <br />今天上午看了4道题。。。AC两道了。。。歇歇,洗澡去~~<br /> <br />#include <stdio.h>#include <stdlib.h>#include <math.h>#include <limits.h>#include <memory.h>#define N 202#define F 0.000000001double d原创 2010-08-29 15:15:00 · 1411 阅读 · 0 评论 -
zoj 1952 Heavy Cargo
<br /> 依然最短路径。。。写得好麻烦,党的才67行。。我的。。开始没理解题意,理解偏了, 看了党的,大悟。。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <string.h>int n,r,x,y,weight,count = 1,result;int map[202][202];void input(){ int num = 0,a,b,i;原创 2010-08-28 15:08:00 · 1191 阅读 · 0 评论 -
zoj 1655 Transport Goods(Dijkstra~~)
<br />dijkstra~~~<br /> <br />自己想得挺麻烦的,而且一直错,看了某洋的,呃,明白了。。<br /> <br />我发现自己写代码都没有好好想想,感觉就是套公式,公式套不了就不会了。笨蛋啊。。。<br /> <br />这个需要自己想的,dis里面保存的是 每个城市货物到capital 的 最大 rate。这个想法很好啊。。。。<br /> <br />动动脑子吧。。<br /> <br />#include <stdio.h>#include <stdlib.h>#in原创 2010-08-29 15:04:00 · 1436 阅读 · 2 评论 -
zoj 2504 Help John!(Dijkstra~~)
<br />一星期没敲代码啦。。。哈哈。。敲起来脑子格外清晰~~<br /> <br />不过DIJ的标记忘写了,WA了几次。。。还是不熟练啊。。。笨笨。。<br /> <br />看着我的代码感觉好好~~用了函数 ,不是以前的混乱状态啦 嘻嘻 感觉很好~~<br /> <br />排名11。。。占用内存好大啊。。。<br /> <br />话说,网通开CSDN真快。。。<br /> <br /> <br />#include <stdio.h>#include <stdlib.h>#include原创 2010-08-25 21:58:00 · 824 阅读 · 1 评论 -
zoj 1333 || poj 1545 Galactic Import(Dijkstra~)
<br />看了半天,题目理解错误咧。。。看了人家的代码才理解。。。<br /> <br />这个题目是让求某个星球到地球(*)货物的最大值。。货物中转一次要减少5%。。开始理解成,经过一个星球,那个星球的货物也要运输到地球了。。。则求最小的中转次数即可。。。<br /> <br />哈,提交了两次,一不小心把党的两个号给挤下去啦,嘻嘻~~NO.2 NO.3~他貌似用的广搜。。。<br /> <br />#include <stdio.h>#include <memory.h>#include <s原创 2010-08-14 13:05:00 · 1670 阅读 · 1 评论 -
zoj 1092 || poj 2240 Arbitrage(Floyd)
CW说用DIJ能做出来,我死活做不出来。。。就用了广大同胞用的Floyd,现学现卖,就三个循环,理解了下。引用下网上某位大侠的一段代码For k←1 to n do // k为“媒介节点” For i←1 to n do For j←1 to n do if (dist(i,k) + dist(k,j) 意思就是,把 i 和 j 的距离缩短到最小。。。就像一个三角形(不过不符合两边之和大于第三边罢了),寻找一个顶点,更新i 和 j的距离,如果这两边之和比原来的小,更原创 2010-08-13 21:07:00 · 1597 阅读 · 3 评论 -
zoj 1589 Professor John(Dijkstra~)
<br />哈~这道题还算顺利~~一次AC~<br /> <br />就是比大小哈,给你一些关系,然后输出X<Y的形式。<br /> <br />我的想法是,将这些关系输入到一个邻接矩阵里,X<Y 的话MAP[X][Y] = -1,大于等于-1, 其他点都为0;<br /> <br />然后找最小的更新点即可,输出的话,输出dis中小于0的点,当然不包括在输入里小于关系的。细节处理比较纠结。<br /> <br />第一次用函数做DIJ哎。。。哈哈~~以后要养成好习惯,嗯嗯。<br /> <br />#原创 2010-08-14 15:31:00 · 1223 阅读 · 0 评论 -
zoj 1857 || poj 2607 Fire Station(纠结!!!)
这个题哈,做了一星期才把zoj的测试数据给过了。。。悲剧啊悲剧。。。最初留这题的时候,开始大家题都米看懂,导致做一天多了,按错的方向来了。。崩溃。浙大的要求是1秒,北大5秒内。理解题意后改改,用dij+邻接矩阵,自己机子跑了8秒多。。。交到北大上,3秒多,过了。后来CW说用邻接表写,我那个纠结啊。。。我不喜欢链表啊不喜欢!!!觉得挺麻烦的,没办法,硬着头皮上吧!居然还写过了!提高到了2秒多,浙大站上依然TLE。再然后,他们几个都用SPFA在浙大上写过了,弄得我也想去看SPFA,然后捏。。CW说用优先队列写,原创 2010-08-07 21:01:00 · 1714 阅读 · 2 评论 -
zoj 1298 Domino Effect || poj 1135(zoj排名第二!!泪奔!!)
纠结了昨天一下午外加晚上快睡觉前的一段时间外加今天上午的一个小时,这道最短路径的题终于AC啦!!!泪奔!!!我想想该怎么说这个算法呢。恩。这道题是寻找多米诺骨牌的最终停下的位置,从牌1开始,如果1连接条路,两条路可以同时开始倒,以后也是,如果key点连接多条路,到达key点时,连接的所有路都开始倒。我的想法是:1、用dijkstra找最短路径,从这些最短路径中寻找最长的路。2、寻找三角形。比如下面这个图(我画的哦~~)黑色数字代表key点,红色代表边长。你所需做的工作就是,从2开始找与2连接的点,距离为1到原创 2010-07-30 10:35:00 · 2316 阅读 · 11 评论 -
zoj 1221 || poj 1603 Risk(Floyd~)
<br />终于瞅见一道最短路的题了~~~哈哈~~<br /> <br />这个题目好长啊,好长啊。。。<br /> <br />挺不容易的 读完题。。。其实没仔细读,基本看了看样例输入输出还有那个图就知道啦~~呵呵<br /> <br />就是求两点中间的最少的城市个数,That's all.<br /> <br />#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>using namesp原创 2010-11-27 14:52:00 · 2075 阅读 · 2 评论 -
zoj 3166 Lazy Tourist(最短路Floyd)
<br />求出到达hotel的环的最短路。<br /> <br />因为是求最后再到达hotel的最小环, 所以初始化都为INT_MAX<br /> <br />单向的路,我很纠结 = =。。。<br /> <br />其他就很水了。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <iostream>#include <memory.h>#include <limits.h>using namespace std;原创 2010-11-28 22:53:00 · 1193 阅读 · 0 评论 -
zoj 1935 || poj 1932 XYZZY(SPFA+Floyd)
<br />给你初始生命值100,进入房间减少或增加生命值,看能不能活着到达目的地。<br /> <br />开始想法是用floyd判断是否有环,然后如果没环的话用dijkstra求最长路。<br /> <br />有负权,问党,党说不可以用dijkstra。。。 = =。。。用了SPFA。<br /> <br />TLE了 = =。。我是用floyd判断是否有正环后才用SPFA的 = =。。估计这点耗时间了。<br /> <br />看网上大牛的思路,用SPFA判断是否有正环,如果有,再用Floyd =原创 2011-01-25 20:54:00 · 1536 阅读 · 0 评论 -
zoj 2500 || poj 1975 Median Weight Bead
<br />之所以划到最短路这里面。。。是因为用到floyd了。。<br /> <br />给你一些数的关系,输出不能成为中间数的数的个数。<br /> <br />我的做法是,对正图,转置图进行两次floyd即可(其实一次也可以,不过反正数据不大。。)。然后算每个点那行1的个数,大于等于(n+1)/2即不可能成为中间数。<br /> <br />如果是中间数,那么比它大的不能超过 n/2 ,比它小的也不能超过n/2。<br /> <br />其实转置图可以用先遍历列再遍历行得到。。我感觉用转置图更直观哈~原创 2011-01-23 20:54:00 · 1197 阅读 · 0 评论 -
zoj 2281 Way to Freedom(最短路加强版)
刚开始一看,哎,这应该是最大流吧,后来一想,以前做过一道一样的,就去做了 = =。。用Dijkstra。点10W,用邻接表存。用最朴素的dijkstra,TLE了。 = =。。好吧,用优先队列。学习了优先队列排结构体的方法,重载比较函数。SF。 = =。好吧。我用dij+heap。以前写fire station的时候就用这个了。写完之后,SF。去死 = =。。方法神马的有看了看,改动了点。终于改成WA而不是SF了 = =。。党也去写这个了,用优先队列,过了 = =。对比了一下,= =。。似乎知道哪错了。我没原创 2011-01-25 14:58:00 · 1005 阅读 · 0 评论