八月解题日志一
Augest_1
POJ2117 Electricity
关节点性质
Augest_1
POJ1644 To Bet or Not To Bet
DP/递推
这种算概率的递推不是第一次见到了
Augest_2
POJ2449 Remmarguts' Date
WOJ 1085 回家的路
第K短路(有环)
A*算法
很经典的解法,Dijstra求最短路作为启发函数
期待弄懂第k简单最短路!
Augest_3
POJ2793 Cactus
图论
涉及环的判定,树的简单计数(乘法原理)等问题
先保证每一条边最多属于一个环——DFS和对边hash解决问题
DFS真是个奇妙的东东
Augest_3
POJ1769 Minimizing maximizer
线段树+DP
用线段树来得到一条线段该取的最优值
Augest_4
POJ3487 The Stable Marriage Problem
稳定匹配问题/稳定婚姻问题
很现实的方法——男方锲而不舍地去追求女孩,直到最后娶到一个对他不变心的女孩(一个女孩遇到一个更适合的女孩后就立刻变心转投新人),这样循环直到所有人满意为止
我只能说这个好现不现实……
The Stable Marriage Problem
function stableMatching {
Initialize all m ∈ M and w ∈ W to free
while ∃ free man m who still has a woman w to propose to {
w = m's highest ranked such woman
if w is free
(m, w) become engaged
else some mat (m', w) already exists
if w prefers m to m'
(m, w) become engaged
m' becomes free
else
(m', w) remain engaged
}
}
Augest_4
POJ2690 Yahtzee
集合DP
难点在于状态选择。
选择对规则做集合DP比较好——这样就现选前6个规则运用于哪几轮,到6轮的时候直接判断
Augest_4
POJ2166 Heapsort
构造法(堆的性质)
由一个元素的堆向后推,每次都是让1从顶到最下面一层就可以了
Augest_5
POJ2580 The Door/Key Problem
字符串处理+不断迭代BFS
输入处理才是麻烦的地方,很容易错
迭代BFS不断尝试得到更多的钥匙和开更多的门——如果不能更多了就没辙只能报告No了
Augest_5
POJ1742 Coins
DP
有数量限制的背包问题
XBB问的题目,由于是LouTiancheng出的题目,我好好想了会……
不过事实证明3000+个AC的题目是简单的,跟无限数量的物品的背包问题有点像(每次记得限制下数量——另开一个数组记录),不过这种做法效率ms不是很好,那些人怎么搞的?
Augest_6
POJ2922 Honeymoon Hike
二分+BFS
很暴力的二分(先分200,再分200,范围还是很小的)
Augest_6
POJ3343 Against Mammoths
二分+二分图匹配+求不等式
求不等式得到能成功攻击的时间长度
二分后做BFS
Augest_6
POJ1751 Highways
MST+一点变化
对于已经存在的边,把他们的权值取0或负数
Augest_6
POJ1652 Holey Cloth
分层BFS
很经典的思想——对于每一块布都分离出来做BFS求洞的个数和大小
Augest_6
POJ1475 Pushing Boxes
BFS套BFS
很经典的题目
难的地方在于保证推箱子次数一样的情况下再保证人走的路长度最小——把推箱子次数一样的全部搜完再退出!
不过状态转移的记录才是麻烦的地方——我用char数组存的人的走法,结果输出好多空白东西,跟官方数据在text下看不出区别——最后只能用两个*去卡一个输出,得到好多空白!
WOJ1341 Friends
ZOJ1492 Maximum Clique
最大团
目前硬搜过的
借用了别人的用位来表示是否选择,不过long long错了搞不定,最后用两个int写高精度
目前程序效率和简洁度都不行
待进一步研究
Augest_8
POJ3463 Sightseeing
Dijstra+递推
Oldmaner推荐的很经典的题目
Dijstra求最短路
然后就倒推符合长度的路径条数——由于每条边长度必定大于一,所以递推不会出现问题
Augest_9
POJ1394 Railroad
BFS
做两遍BFS,第一遍求最早到达时间,第二遍把图倒过来求最迟出发时间
Augest_10
POJ1364 King
差分约束
原来对差分约束死套公式,昨天差不多忘记了
套路型建图后bellman-ford
Augest_10
POJ3678 Katu Puzzle
2-SAT
第一次看到这么一种题……
然后我yy了一种不断假设的算法——事实证明是能够AC的,麻烦而已
2-SAT有两种解法:一种就是假设后验证调整,还有就是转化为求图的强连通分量
图模型的难点在于模型转化,这个题把AND、OR、XOR都齐了
经典
Augest_11
POJ1860 Currency Exchange
Bellman——ford
很直接的模型,不过精度太搞人了——EPS=1e-8终于过了
Augest_11
POJ2749 Building roads
二分+2-SAT
模型建立比较麻烦
出题人的报告:
Building roads
标程用的算法是二分查找,给定一个答案后,用2-SAT判断是否可行。下面主要说一下2-SAT问题的建模。用布尔变量Xi表示第i个牛栏连到第一个中转站,即Xi为真时连到第一个,为假时连到第二个。那么~Xi表示第i个牛栏连到第二个中转站,~表示布尔取反。 检查每一个约束条件,构造2-SAT的和取范式。
1)i和j不连到同一个中转站,就增加和取范式(Xi + Xj)(~Xi + ~Xj)。
2)i和j必须连到同一个中转站,就增加和取范式(Xi + ~Xj)(~Xi + Xj)。
设现在二分的答案是S。那么检查每一对牛栏i和j(假设D1i,D1j表示i和j到第一个中转站的距离,D2i,D2j表示i和j到第二个中转站的距离,DD表示两个中转站之间的距离)。如果
3)D1i + D1j 〉S,就增加和取范式(~Xi + ~Xj)
4)D2i + D2j 〉S,就增加和取范式(Xi + Xj)
5)D1i + D2j + DD 〉S,就增加和取范式(~Xi + Xj)
6)D2i + D1j + DD 〉S,就增加和取范式(Xi + ~Xj)
剩下的只是用2-SAT的现成算法去判断是否有解。
Augest_11
POJ2723 Get Luffy Out
2-SAT
比较直接的模型——hash一下一对钥匙(当作一个变量的正反)就可以了
然后由于求最大的可能,二分一下再加如门上的限制, 然后2-SAT就好了
Augest_11
POJ2162 Document Indexing
模拟+Trie
按规则模拟(这里让我从比赛一直错到晚上,忘记考虑最后一行后面没有行了——后来直接在后面加两空行)
建立Trie:超描每个单词建立Trie树,每个节点附带单词出现的Page信息
最后遍历Trie树输出
Augest_13
POJ3057 Evacuation
BFS+二分+二分图匹配
BFS求每个人到达任意门的最短路径长度
二分所有人能出来的时间t
将一扇门拆成t个点(拆点的原理:一扇门一个时间只能出去一个人),作人于带时间限制的门间的匹配
我RE了好几次
Augest_16
POJ2679 Adventurous Driving
差分约束+DFS(种子填充?)
这个题的题意就很难懂!其实就是对于每个顶点,只有那些与起相连边中花费最小的边有效,然后求从起点到终点的最小花费路径,并得出最小花费路径中的最小路径长度
1、判断起点到终点是否存在路径(DFS)
2、Bellman-ford求最小花费是否存在(判断负环)并求最短路径
第二步比较trick,我是下了数据才发现我为什么TLE——负环实在太小,很难传递到源点
所以松弛n次后发现负环直接DFS检验是否可以传递到源点
Augest_18
POJ3169 Layout
差分约束
对hate和like分别列方程
Augest_18
Advertisement
贪心或差分约束
贪心的证明麻烦,不知道
差分约束的做法:
dis[i-1] - dis[i] <= 0
dis[i] - dis[i-1] <= 1
dis[a-1] - dis[b] <= min(b-a+1, k)
最后取dis[i] – dis[i-1] == 1的i
Augest_18
POJ2501 Escape from Enemy Territory
BFS+二分+BFS
用BFS标记每一格的无危险值;
再二分危险值后BFS求最短路
第一次居然是标记危险值的时候做10000次BFS,由于有1000*1000格,必然TLE。
二分的思想还是很重要……