USACO-Chapter2-Section2.4 Shortest Path
感觉虽然题目说是最短路,实际上很多不能算最短路吧。题目也不难,最难也就是裸的dijkstra。不过自己搜索从一开始的很丑陋很暴力的,越写越优雅了倒是真的。
2.4.1 ttwo
code
1 | /* |
2.4.2 overfencing
code
1 | /* |
2.4.3 cowtour
code
1 | /* |
2.4.4 comehome
这道题一开始我想的是反向BFS的,后来发现这个图,直接BFS不一定最先出来的是最短边,可能还是要遍历整张图。于是用了dijkstra。 dijkstra用裸的,什么优化都没有的就可以跑。一开始我还在觉得用字母好难处理,后来发现用字母太妙了。 一开始看到一万条边,把我吓得不行,后来想了想,用字母表示点,最多也就五十多个点,等于有很多重边和自环,easy~
dijkstra反向跑一下就行了,难点在hash一下字母和数字对应关系。 有的人是dijkstra松弛到大写字母最短边就return了,因为我不太会这种写法,所以我跑完了全部的dijkstra然后再去找。
code
1 | /* |
2.4.5 fracdec
直接模拟就好了。遇到了的几个问题: 1. 一开始判断是否出现过这个情况,我没用set< pair >
来处理,而是用了两个set
,一个记录商,一个记录余数。结果会发现可能,商是出现过的,余数也是出现过的,然而这两个不是同时出现的,导致出现错误(样例就是这种情况)。 2. 对整除的\(1.0\)这种情况,容易变成\(1.(0)\)。可以通过判断余数是否是0来判断整除与否。
code
1 |
|