补题进度:5/11
1001(双向BFS)
题意:
给你一个类似移子游戏,给你初始状态和终止状态,问初始状态到终止状态至少要移多少步,如果步数>20就-1
分析:
很明显的BFS了,不过普通的BFS会有4^20个节点,会TLE
这里因为移动方式可逆并且两个状态明确,所以可以双向BFS,在中间汇合就行
只需要在某个方向的BFS扩展到12步左右的时候返回-1就行了
1002(BM算法模板)
题意:
给你很复杂的很复杂的递推式,你需要求$\left \lfloor \sqrt a_n \right\rfloor$
分析:
这个有根号还有取整肯定不能直接矩阵乘了
猜测一下结果应该是线性递推,所以手算几个初值丢到杜教的BM板子里就行了
1003(待填坑)
1004(待填坑)
1005(待填坑)
1006(待填坑)
1007(待填坑)
1008(树的最大匹配)
题意:
有一个n个点的树,你需要选择k个点每个点上放一只猴子,树上的n-1条边中你可以选择删掉一些保留一些,但是必须能让每个猴子所在点的连通分块内都有另一只猴子,问最少保留多少条边
分析:
贪心着来,肯定是尽可能往树的最大匹配上丢猴子最优,这样的话2k个猴子只需要保留k条边
最大匹配的点丢完了然后怎么办呢,容易发现这时候往任意一个点丢猴子都会使得结果+1,所以随便将剩余的猴子丢上去就行了
于是只需要用dp跑出最大匹配这题就结束了
时间复杂度O(n)
顺便一提这题卡读入
1009(待填坑)
1010(贪心+堆)
略
1011(裸的次短路)
略