给出一个无向图,求最少点覆盖
(太难了,以后补
给一棵树,每个结点上有一个字母。给出一个单词,问树上是否存两个点A,B,使AB的最短路径上的字母组成这个单词
剪枝:预处理每个点到最深的叶子结点的距离,查询的时候如果剩余单词长度大于这个距离,就可以剪掉
5469 1138MS 2360K 2009 B G++
dir[i][j]表示’0’的位置在i的时候,可以和谁换,先把每个状态之间的转换预处理出来,然后就可以BFS了 [学会这题就可以做15北京网赛的那个Boxes了
Accepted 1320K 94MS G++ 1363B
有n个盘子,大小分别是1-n,现在给出他们的一个排列,求移动成顺序(1,2,3,4…n)最少需要多少步。移动的规则是每次只能移动一个盘子,小的盘子可以放在大的盘子上
没做过这种bfs,不知道怎么从一种状态往其他状态扩展 = =!
用一个数组state记录每个第i个的盘子放置的位置,那么可以先从state[1][2][3][4][5][6][7]搜出所有结果,然后O(1)查询,因为不知道会有几个盘子,所以要BFS7次(n = 1 和 n = 2的时候可以特判)
如果问从S到T最少去掉多少条边使ST不连通,那么这就是个最小割的问题
把每个点拆成两个,连一条费用为0,流量为1的边,其余相连的两点连一条费用为1,流量为1的边。则每条增广路的费用为S-T的路长,S-T的费用大于K时停止增广,此时的最大流即为此图的最小割边数,原图的最小割点数
然而上面的想法是错的…
正解:枚举删除的点