一周学习总结4.19

Dijkstra算法,求单源最短路径的算法。本质上是一种广度优先搜索的过程。

Prim 算法,另一种求MST的经典方法。与dij的算法很类似。使用二叉堆构造的最小优先级队列,可以改进算法的时间界。

Heap,二叉堆。可以进行堆排序和最大(最小)优先级队列。能够在O(lgn)的时间内插入或修改堆中元素,并保持堆的性质。

Ford-Fulkerson算法,求最大流的基本算法。每次迭代中找出任意增广路径p,并把沿p每条边的流f加上其残留容量cf(p)。

Edmonds-Karp算法,是对Ford-Fulkerson算法的改进。使用BFS求增广路径。能够优化算法的界,时间复杂度为O(V*E^2)。

 

POJ 1797 Heavy Transportation:dij的变形。在每条可行的路上取最“窄”的一段弧,问这些弧中最“宽”的是多少。(发现自己没办法用文字表达清楚意思,语文太差……)仔细想想就会发现,要使最“窄”的最“宽”,那整条路就应该是所有的路中最“宽”的。

 

POJ 3268 Silver Cow Party:dij的逆向使用。求图上所有点到某特定点x再返回的距离中最大的。一开始想先用Floyd求所有点到x的距离,再用dij求x到所有点的距离,相加找最大。比较直接的方法,但不幸的TLE了……Floyd用时太久。关键在于求单汇点的最短路径。就是dij的逆应用,不详细说了,就是把所有的弧都反向,那么汇点就变成源点,就成了单纯的dij。

 

POJ 3159 Candies:求1到n的最短路径。数据量很大,时间卡的很严。我用heap+dij。算是个模板题。第一次用堆,写了2天,CE, RE ,TLE, WA,什么错误都有了……用邻接表的话要先申请好内存,动态内存分配会TLE。

 

POJ 2485 Highways:求MST中权值最大的边。虽然是第一次写prim,把前面heap+dij的代码改了改。轻松1Y。

 

POJ 2253 Frogger:和1797思想完全一样。求所有可行路上最长的弧。只不过是“>”变“<”。题目其实还不怎么理解,稀里糊涂就AC了……不过我用的是2485的模板,prim和dij真的蛮像……

 

POJ 1426 Find The Multiple:为了练BFS找的题。第一次写BFS。以前做了几题搜索都是DFS。貌似这题有其他更好的方法……求一个数n的倍数m,要求m只含有0和1。从1开始每次尝试,若不能整除n就在该数的末尾加“0”或“1”,加入搜索序列,然后沿序列向下继续。说是m不超过100位,还好其实用__int64就可以满足长度要求,否则高精度就麻烦了。

 

POJ 3126 Prime Path:也是BFS。问一个素数,每次只改变一位变成另一个素数,最少要改变几次才能变成目标素数。从起始素数开始,每轮将所有可行的改变放入搜索队列。为了不重复,要设置标志位。我用数组来记录改变路径,每个结点指向其父结点。到达目标之后向上寻找到祖先,即可求出改变了几次。这题其实我写的很烂……150MS+

 

POJ 2255 Tree Recovery:已知树的前序遍历和中序遍历,求后续遍历。递归解之……

 

POJ 1306 Combinations:计算排列组合中Cm,n的问题。C = N! / (N-M)!M! 。我没用高精度。我是先除后乘。将大分数拆分成很多个小分数连乘,最后输出整数部分。double精度足够了。

 

POJ 2388 Who's in the Middle:发现POJ上水题也不少啊……qsort之后输出中间位置的值。

 

POJ 1273 Drainage Ditches:最大流的入门题。直接使用Ford-Fulkerson算法。

 

POJ 1459 Power Network:1273是单case,所以增广路径怎么求都没关系,这题一开始我直接改1273的代码,结果就TLE。要用Edmonds-Karp来做。这题有多个源点和汇点,所以要自己建一个超级源点S和超级汇点T,然后直接用E-K算法。感觉又是模板题了……貌似求增广路径还有很多的方法,现在连入门都算不上。唉,慢慢学吧。

 

 

刚才看了数学建模的时间安排,当场囧到。好狠呐,周末从早到晚。五一之前100题不知道能不能完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值