ACM--最短路
布呗之路
每个人都有不同的路,所以每个人都会孤独。
展开
-
POJ - 1797 Heavy Transportation
/* 题意就是说从1-n的所有通路中找到一个最大载重量; 运用dijkstar算法进行松弛操作,就是每次找到最大边然后不断的更新; */ #include<cstdio> #include<cmath> #include<cstring> using namespace std;int Minn(int a,int b) { return (a<b)?a:b;} int Maxx(int a,int原创 2017-11-17 13:32:22 · 211 阅读 · 0 评论 -
POJ - 2502 SUBWAY(FLOYD算法求解最短路)
/* 题意就是求去学校所花最短时间,在每一段距离中我们可以选择步行也可以选择坐地铁,因为有些路可能没有地铁,所以我们需要选择最佳路径 输入家和学校的坐标; 然后再给出你地铁的坐标,这个就是卡你的输入了,因为它那个每次 走到-1 -1 的时候呢它的第一个节点是不能读取的,因为只有相邻的两个节点, 它才会有距离感。这个后续解释; 那么咋们应该怎么solve it?首选dijkstra,因为它的地铁站点一原创 2017-11-23 11:06:53 · 330 阅读 · 0 评论 -
POJ - 1062 昂贵的聘礼 (等级限制,过程部分最优得到结果最优,SPFA)
/**题意:一个人它需要获得一件物品,但是呢他现在的钱不是很够, 所以呢它可以进行周转得到更多的金币,那么它应该怎么做呢? 所谓周转就是用金币换 或者以物换物,因为同一件商品在不同的人里面 它的价值可能是不一样的,所以它需要通过花最少的钱来获得该物品 所需的费用;(因为它开始买东西也是需要费用的); 这个题目呢主要卡的就是你的等级限制; 所以呢咋们就需要找到它的所有的等级,因为它会存在重复的情况;原创 2017-11-26 14:04:44 · 262 阅读 · 0 评论 -
POJ - 1502 SPFA
/** 题目大意:N个处理器要进行信息传递,处理器i传递信息给自己不需要时间,处理器i与处理器j之间相互传递信息的时间是一样的, 不同处理器之间传递信息所需要的时间由一个矩阵的下三角给出。 若矩阵对应位置为x,则说明相应的两个处理器之间无法传递信息。 求从第一个处理器传递信息到其他所有处理器最少需要多少时间。 最少需要多少时间 那么就是看1-n最长的那个需要多少时间; */#include<cst原创 2017-11-26 00:30:45 · 257 阅读 · 0 评论 -
LightOJ - 1074 Extended Traffic(SPFA判负环)
/* 题意:有n个城市,每一个城市有一个拥挤度ai, 下面m行数据(a,b)表示的是a,b两个位置同时能够得到a到b所花的时间为(a-b)^3,然后再给q个数据x,问从第一个城市到达第x个城市所花的时间, 如果不能到达,或者时间小于3输出?否则输出所花的时间 思路;这个题目是存在负环的,所以常规的判别负环是不能够 get over it 所以我们可以用SPFA算法来搞一波事情;只要标记的位置访问的次原创 2017-11-24 13:38:44 · 578 阅读 · 0 评论 -
POJ - 3159 Candies (变形的最短路问题)差分约束,栈版本SPFA,前向星建图
/* :flymouse是幼稚园班上的班长,一天老师给小朋友们买了一堆的糖果,由flymouse来分发。 flymouse希望自己分得的糖果数尽量多于snoopy。 对于其他小朋友而言,则必须自己得到的糖果不少于班上某某,给出m个关系(A,B,C),B获得的糖果数不能多于A C个 问flymouse最多能多snoopy几个糖果。 那么这样就形成了一种差分约束B-A<C,变形一下就是 B<A+C,这样原创 2017-11-23 12:26:42 · 307 阅读 · 0 评论 -
POJ - 3259 弗洛伊德判负环
///这个就是判断回路是否存在负环; ///然后用一下佛洛依德就出来了;细节如下 #include<cstdio> #include<cstring> using namespace std;int mmp[505][505],n,m,k;int floyd() { int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++)原创 2017-11-18 00:56:44 · 722 阅读 · 0 评论 -
POJ - 1860 Currency Exchange 判断正环(SPFA,FLOYD)
/* 一个人去银行存钱,但是呢,存钱和取钱的汇率是不一样的,所以它想通过存钱使得自己的本金变高,然而事实是在取钱的过程中,需要手续费。 这个就很难办了,万一它的手续费很大呢,所以在循环多次的情况下它的钱可能变为一个负数,所以在这里我们的思路就是判断其中是否含有正环就好了; 开始的时候,我以为在存钱的时候,循环一圈之后如果得到的钱数比本金大就好了,所以在开头的时候就说了,万一手续费很高呢,所以在循环的原创 2017-11-18 13:59:05 · 404 阅读 · 0 评论 -
POJ - 2240(Arbitrage)弗洛伊德 变形 get最长路
///题意:我们知道每个国家的汇率是不一样的,所以呢我们可以通过不同的交换从中获取牟利, ///假设1美元买0.5英镑,1英镑买10法郎,1法郎买0.21美元。 ///然后,通过转换货币,一个聪明的交易者可以从1美元开始,买入0.5×10×0.21=1.05美元,获利5%。这样的话呢就轻易获利了; ///说实话就是说开始的钱的类型和最后的钱类型是一样就行了;(几经周转最后钱数变多,说白了就是说最后汇原创 2017-11-21 15:10:19 · 560 阅读 · 0 评论 -
Layout POJ - 3169 差分约束 SPFA
/** 题目大概的意思就是:两个小牛不喜欢对方,每两头牛之间就会产生一些距离感 我们需要计算第一头牛和最后一头牛的最大距离;(嫌弃的距离最大) 然后呢它给出了每两头牛的最短距离和限制的最大距离,存在两种约束条件,转换一下就变成了最短路; 我们可以选择按照前向星建图正向接正和反向接负的方法, 然后跑一波SPFA找到最短路; 输出的话呢,就是 牛不站在一排的话(简单的说就是存在负环),输出-1; 牛1和原创 2017-11-30 12:51:24 · 242 阅读 · 0 评论 -
Dijkstra POJ - 2387
/*题意就是说从节点为1走到节点为n的节点花的时间最短; 这个题很明显就是最短路的一些知识了,用dijkstra水水的就过去了; 然后呢就这个题目来说一下关于我对dijkstra的看法;这个东西呢就是计算单源最短路(从某个点到某一个点的最短时间); 这个我们先将源头节点视为0(开始走的时间为0),其余的为inf(无穷);在n次循环中,我们在每一个未标记的节点中,选出达到这个点所花的 最小时间的位置,原创 2017-11-14 19:43:42 · 429 阅读 · 0 评论 -
POJ - 3268 Silver Cow Party(两遍dijktsra)
///这个题的意思就是说:一群牛要去指定的一头牛的家里做客,然后呢去的时候的路线和返回的路线可能不一样(有向图的权值不一样), ///求到达那头牛家里的时间和返回家里的时间和的最大值;(求里面的某一头 去和回来 时间的最大值;) ///因为这个是有向图,所以呢,咋们可以来两遍dijkstra,过去和回来,然后再最后取一个最大值就好了; #include<cstdio> #include<cmath>原创 2017-11-17 18:19:29 · 440 阅读 · 0 评论 -
POJ-1511(SPFA找最短路(正向和反向))
///这个题目有点意思,搞了很久过了的样例,后来发现全部都白做了,一直RE RE ,一首fuck送给题目; ///说说这个题目吧,就是求1节点到所给任意节点的最短路径之和ans1,再求任意除1节点外的节点到1节点(反向)的最短距离之和ans2;ans=ans1+ans2; ///那为什么我发现全白做了呢,因为我用的是dijkstra,它们给我的节点的个数是1e6,瞬间就傻逼了; ///那么这个题就好原创 2017-11-21 17:15:30 · 504 阅读 · 0 评论