
最短路径
KIDGINBROOK
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
zoj 1942 Frogger
题目大意,湖中有n个石头,一只青蛙要从一号石头上跳到2号石头上,要使所有可行路径中最大边最小,并输出该最大边。 同zoj1952类似,动态规划,用dist[ i ][ j ]表示从 i 到 j 路径中的最长边,则枚举中间节点 k ,则状态转移方程为dist[ i ][ j ] = min( dist[ i ][ j ] , max(dist[ i ][ k ],dist[ k ][ j ]))原创 2013-08-15 14:39:14 · 1204 阅读 · 0 评论 -
hdu 5545 The Battle of Guandu 最短路径
The Battle of Guandu Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 394 Accepted Submission(s): 179 Problem Description In the原创 2017-08-29 20:43:14 · 620 阅读 · 0 评论 -
cf 507E Breaking Good 最短路
在一个有n个城市m条边的国家,有一个犯罪团伙。这个犯罪团伙想要抢银行。犯罪团伙基地在城市1,银行在城市n。有个人Walter想要加入这个犯罪团伙,于是为了过的团伙高层的信任,Walter必须担任一项的任务,那就是在基地到银行之间选出一条最短路。这个国家有若干公路在维修,于是你需要将最短路径上的公路修好,为了阻止别的警察追击我方,还必须将所有的不在最短路上的公路炸毁。假如有多条最短路,那么需要选择影原创 2015-02-03 19:47:22 · 805 阅读 · 0 评论 -
zoj Heavy Cargo
题目的意思是选择路径并使从 i 到 j 的路径上最小承受重量最大化。 动态规划,类似floyd,用dist[ i ][ j ]表示从 i 到 j 的最小重量,枚举中间节点 k ,则状态转移方程可写为dist[ i ][ j ] = max ( dist[ i ] [ j ], min ( dist[ i ][ k ],dist[ k ][ j ]))。 index为命名函数,将英文名转换为标号原创 2013-08-14 15:39:19 · 556 阅读 · 0 评论 -
hdu 1142 A Walk Through the Forest 最短路
题目大意:对于图中节点要从起点走向终点,而且能从A节点走向B节点的条件是在B点存在一条到终点的路径,且这条路径的长度小于任何从A节点通往终点路径的长度,求共有几种走法。 对于图中限制条件,其实只要判断从B到终点的最短路径是否小于从A点到终点的最小距离,若小于,则可以,否则不可以。 经过这样转化后,题目将十分明显,深搜即可,但发现图中节点十分多,最多能达到1000个,所以深搜过程中要用记忆化搜索原创 2013-09-25 23:08:02 · 515 阅读 · 0 评论 -
zoj 1232 Adventure of Super Mario
已知一个无向图,有村庄节点a个,有城堡节点b个,1到a表示村庄,a+1到a+b表示城堡,求第一个村庄节点到最后一个城堡节点的最短距离。如果某一段路径长度小于等于L且中间经过的节点(不包括两端)均是村庄类型,则可以穿一种神奇的靴子瞬间移动到那里,靴子只能在节点上使用或停止,靴子只能用K次 设共n个节点,对于如何使用这k次机会是一个动态规划问题,dp[ i ][ j ]表示从村庄1经过标号小于原创 2013-08-13 21:31:24 · 705 阅读 · 0 评论 -
zoj 1082 Stockbroker Grapevine
题意是在n个股票经纪人之间散播谣言,从 i 到 j 传到需要 t 秒,问选定那个股票经纪人可以是谣言最快的使所有人都知道,并求出这个时间。 直接floyd,遍历即可。 #include #define INF 10000 int n,m,dist[110][110]; void floyd() { int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i原创 2013-08-15 15:56:30 · 608 阅读 · 0 评论 -
ZOJ 1221 Risk
题目大意是给出世界地图,判断从国家A到国家B最少经过多少个国家。 只需将每条边的权值赋为1,然后求最短路径即可。 #include #define INF 10000 int dist[25][25]; int ob[400][2]; void floyd() { int i,j,k; for(k=1;k<=20;k++) for(i=1;i<=20;i++) for(j=1;原创 2013-08-15 17:11:03 · 1131 阅读 · 0 评论 -
ZOJ 2797 106 miles to Chicago
题目大意,给出n个节点,m条边,每条边的权值表示从该条边走不被警察抓的概率,问从节点A到节点B不被抓的最大概率。 floyd变形,只需将方程改为max[ i ][ j ] =MAX(max[ i ][ j ] ,max[ i ][ k ]*max[ k ][ j ] )即可,初始时max[ i ][ j ] = 0,还有一点值得注意的是题目给的边的权值(即概率)是1到100之间的,直接乘的话可原创 2013-08-15 17:38:44 · 1577 阅读 · 0 评论 -
zoj 1092 Arbitrage
题目大意是有n个国家之间的汇率,问是否存在从一个国家出发回到该国家后汇率乘积大于一,即套汇。 可以用bellman做,因为是回路,所以要递推n次(多于n次无意义,因为若存在套汇,n次就知道了)。 也可以用floyd算法,最后判断lowdist[ i ][ i ]即可。 #include #include int n,m,flag; double maxdist[50]; char nam原创 2013-08-14 10:56:25 · 706 阅读 · 0 评论 -
codeforces 786B Legacy 线段树建图最短路
B. Legacy time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Rick and his co-workers have made a new radioactive formula and a lot o...原创 2018-11-01 19:38:13 · 503 阅读 · 0 评论