随笔分类 -  图论_最短路

摘要:HDU 1385大意:有N个城市,然后直接给出这些城市之间的邻接矩阵,矩阵中-1代表那两个城市无道路相连,其他值代表路径长度。如果一辆汽车经过某个城市,必须要交一定的钱(可能是过路费)。现在要从a城到b城,花费为路径长度之和,再加上除起点与终点外所有城市的过路费之和。求最小花费,如果有多条路经符合,... 阅读全文
posted @ 2014-05-26 13:33 GLSilence 阅读(814) 评论(0) 推荐(0)
摘要:Currency Exchange大意:有多种货币,之间可以交换,但是需要手续费,也就是说既有汇率又有手续费。问经过交换之后能不能赚。思路:Bellman_Ford,因为要求最长路,所以松弛条件改一下就好了。Tips:3 2 1 20.0货币的数量 兑换点的数量 主人公拥有的货币量 主人公拥有货币的价值1 2 1.00 1.00 1.00 1.00//货币1与货币2交换时,1与2的汇率是1.00,1换2的手续费是1.00,2与1的汇率是1.00,2换1的手续费是1.00。2 3 1.10... 阅读全文
posted @ 2014-01-20 08:04 GLSilence 阅读(271) 评论(0) 推荐(0)
摘要:Arbitrage大意:给你m种货币,给你m种货币兑换规则,问通过这些规则最后能不能盈利。eg:1美元换0.5英镑,1英镑换10法郎,1法郎换0.21美元,这样1美元能换0.5*10*0.21=1.05美元,净赚0.05美元。思路:用Floyd找出每两种钱之间的最大兑换关系,遍历一遍,看有没有那种钱币最后能盈利,有就输出Yes,没有就是No。在处理钱币名称与编号之间的关系时,可以用map存(比较好用),当然也可以用字符串比较。 1 #include 2 #include 3 #include 4 #define INF 0x3f3f3f3f 5 using namespace std; ... 阅读全文
posted @ 2014-01-19 15:49 GLSilence 阅读(1320) 评论(0) 推荐(0)
摘要:Stockbroker Grapevine大意:有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint。思路:有向图(互相之间可能不等)中各顶点之间的最短路径问题。一个人收到消息后便开始向所有他能发送的人(因人以固定的不等时间(长度1~10))发送消息,当所有人都收到消息后的时间长短为评价标准。 1 #include 2 #define INF 0x3f3f3f3f 3 4 int n; 5 int Map[110][110]; .. 阅读全文
posted @ 2014-01-19 10:52 GLSilence 阅读(185) 评论(0) 推荐(0)
摘要:Frogger大意:给出两个青蛙的坐标和其他n-2个石头的坐标,任一两个坐标点间都是双向连通的。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。思路:先求出两两之间的最短距离,再求出每个点开始的最长路,在这些最长路中求出那个最小的。、输出用printf怎么着都不过,直接用cout了。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define INF 0x3f3f3f3f 9 using namespace st... 阅读全文
posted @ 2014-01-18 22:24 GLSilence 阅读(197) 评论(0) 推荐(0)
摘要:昂贵的聘礼大意:中文题思路:每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点到所有节点的最短路。因为有等级限制,所以枚举每个点作为最低等级,选取符合所有符合等级限制的点。PS:参考的别人的博客,理解的不是很透彻,有些地方没想明白,后面还是要复习一下。 1 #include 2 #include 3 #include 4 #define INF 0x7FFFFFFF 5 6 int N, M; 7 ///物品i在有t号替代品的情况下的优惠价Map[i][t],当t=0时说明i无替代品,此时为原价 8... 阅读全文
posted @ 2014-01-18 16:48 GLSilence 阅读(363) 评论(0) 推荐(0)
摘要:Wormholes大意:虫洞旅行,前面一部分(n组)是双向正权,后面一部分(w组)是单向负权,判断有没有负权环。思路:由于有负权边,就不能Dijkstra了,用Bellman_Ford。就是看图中有没有负权环,有的话可以无限次走这个环,使得时间一定能得到一个负值。所以有的存在负环话就是可以,没有的话就是不可以了。 1 #include 2 #include 3 #include 4 #define Max = 10001 5 6 struct node 7 { 8 int s, e, t; 9 } q[5010];10 11 int dis[520];12 13 bool Be... 阅读全文
posted @ 2014-01-18 09:30 GLSilence 阅读(214) 评论(0) 推荐(0)