那些上演着繁华不肯谢幕的年华里开出一朵地老天荒的花。—From zyf 学姐
[CQOI2017]小Q的棋盘
题目描述
小 Q 正在设计一种棋类游戏。
在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中。某些格点之间有连线,棋子只能在有连线的格点之间移动。整个棋盘上共有 V 个格点,编号为0,1,2 … , V− 1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点。小 Q 在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的。
小 Q 现在想知道,当棋子从格点 0 出发,移动 N 步最多能经过多少格点。格点可以重复经过多次,但不重复计数。
输入输出格式
输入格式:
第一行包含2个正整数V, N,其中 V 表示格点总数,N 表示移动步数。
接下来V − 1行,每行两个数a_i,b_iai,bi,表示编号为a_i,b_iai,bi的两个格点之间有连线。
输出格式:
输出一行一个整数,表示最多经过的格点数量。
输入输出样例
输入样例#1:
1 | 5 2 |
输出样例#1:
1 | 3 |
输入样例#2:
1 | 9 5 |
输出样例#2:
1 | 5 |
说明
【输入输出样例 1 说明】
从格点 0 出发移动 2 步。经过 0, 1, 2 这 3 个格点。
【输入输出样例 2 说明】
一种可行的移动路径为 0 → 1 → 3 → 5 → 3 → 7,经过 0, 1, 3, 5, 7 这 5 个格点。
【数据规模与约定】
对于 100%的测试点,N,V ≤ 100, 0 ≤a_i,b_i< V
题解
我想到了一个很不好写的dp做法。。。
设
表示节点u走k步不回来/回来访问的最大节点数。
对于回来的转移比较简单,因为回到这个点意味着访问完它的子树都要回去,一个纯粹的树上背包。
这部分时间复杂度是
但是对于不回来的转移就比较麻烦了,我们需要枚举当前点状态的基础上枚举每个回来的点和其状态,然后对于剩下的步数再做完全背包,时间复杂度在
以上。这样应该能勉强通过。
不过十分难写。。。
可以参考一下别人的代码
他加了一个优化:除掉一颗子树虽然没有办法直接减,但是可以处理f的前后缀最大值数组,然后把儿子看做线性排列每次转移0系列状态就直接用前后缀合并就可以了。
Code:
1 |
|
我的暴力dp不知怎么错了。。。
Code:
1 |
|
UVA1185 Big Number
题意翻译
题目背景没有营养,大意为求一个大数(很大很大)的阶乘的位数(即这个数的阶乘是几位数)
题解
刚学的log函数性质emm
Code:
1 |
|
9:00了,今天除了道水题就做了一道题。。。死磕不是个好办法啊qwq,