POJ #3253 : Fence Repair
传送门:http://poj.org/problem?id=3253
题意:给n个锯完后的木头的长度。每次锯a+b长度的木头花费a+b。问原来的一整块大木头锯完最少花费多少。
思路:贪心,Huffman编码。用优先队列,每次把最小的两块拿出来相加再塞回队列,队列里最后一个元素就是答案。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
POJ #3259 : Wormholes
传送门:http://poj.org/problem?id=3259
题意:给出n个点,m条正的无向边,w条负的有向边。问有没有负环。
思路:Bellman-Ford判断有没有负环。如果有点在第n次还在更新,那就有负环。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
LightOJ #1074 : Extended Traffic
传送门:http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1074
题意:给出n个路口m条有向边,每个路口有一个忙碌值。有q个询问,问从点1到询问的点最小的花费和,若小于3或无法到达则输出‘?’。花费为(终点忙碌值-起点忙碌值)^3。
思路:因为是3次方,所以是可能存在负环的。还是用Bellman-Ford求单源最短路+判哪些点在负环里。
多开一个cycle数组,初始化为0,和算最短路一样不断更新,最终所有cycle[i]<0的点i都在负环里。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
POJ #1949 : Chores
传送门:http://poj.org/problem?id=1949
题意:有n件家务活,每个都有完成需要的时间和前置家务。问全部完成最快要多久。
思路:优先队列,记录点和结束该任务的时间,按时间从小到大排。记每个点的入度,每当入度为0就进队列,不断维护最大值就是答案。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
POJ #1860 : Currency Exchange
传送门:http://poj.org/problem?id=1860
题意:有n种货币以及m种交易,给定初始时有的货币种类(1种)和货币金额。每种交易都指定2种货币,以及交易的汇率和手续费。问有没有可能钱越换越多。
思路:实际上就是判负环。Bellman-Ford判断即可。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include