UVa1099 Sharing Chocolate 题解设 \(f(x,y,S) = 0/1\) 为当前巧克力长为 \(x\),宽为 \(y\),选出的 \(a_i\) 集合为 \(S\) 时,能否成功分割。 这样状态数有 \(xy \cdot 2^n\) 个,过多。 设集合 \(S\) 中元素的面积和为 \(sum_S\)。仔细观察不难发现:能够分割成功,当且仅当 \(sum_S = xy\)。 所以我们就可以只计算满足以上条件的状态。并 2022-01-26 题解 #DP #状态压缩
luogu5858 Golden Sword 题解设 \(f_{i,j}\) 为放入第 \(i\) 个原料,炼金锅中共有 \(j\) 个原料时的耐久度之和。 边界 \[ f_{i,j}= \begin{cases} 0 & i=0,j=0 \\ -\inf & \text{otherwise} \end{cases} \] 考虑 \(j\) 的取值范围。因为最少一个也不拿走,最多拿走 \(s\) 个,锅中最多有 \ 2022-01-23 题解 #DP #单调队列
luogu3225 矿场搭建 题解本题思路还是比较清晰的。 显然的,求出 v-DCC 并缩点,然后判断方案数。 在本题中,可以只用 Tarjan 算法求出割点。标记割点,从其他的点依次 DFS,统计每颗搜索树上割点的数量(不重复统计)。 若图中没有割点,那么图中任选两个节点都能满足条件,答案 $ (2,C_n^2)$ 若搜索树上割点为 1,则由于树上两点之间有且仅有一条简单路径,所以这颗搜索树中一定至少选一个点,累加 2021-10-16 题解 #双连通分量
luogu1967 货车运输 题解题目要求不超过限重,不难想到因该最大化每条路的限重。所以在原图上求出最大生成树。 对于点 \((x,y)\),如果在并查集中 \(x\) 与 \(y\) 不在同一个集合,则 \(x\) 不能到达 \(y\) 接下来就是每辆车最多运送的货物,不难想到最多运送的货物就是 $ (x y)$ 路径上权值最小的边。 如果用朴素的算法去求最小的边权,那么复杂度会上天,\(O(n)\)。 联系我们对 2021-10-10 题解 #生成树 #最近公共祖先 #倍增
CF372C Watching Fireworks is Fun 题解题外话 前天英语考试,作文是 假如你是李华,你的美国朋友 Jack 对中国传统文化很感兴趣,他写信希望你能够告诉他有关春节的事情,请你写一封回信给他。开头和结尾已经给出,不计入总词数…… 然后因为做过这道题,我就记住了 Firework 这个词,在这篇作文中竟然用上了( solution 设 \(f_{i,j}\) 为第 \(i\) 个烟花 \(blooms\) 时,在第 \ 2021-10-10 题解 #DP #单调队列
luogu2680 运输计划 题解最小化完成所有任务的时间,考虑二分答案。 用 \(lca\) 算法预处理每个计划的距离,设第 \(i\) 个计划的距离为 \(W_i\) 如何判断完成任务的时间 \(t\) 是否可行呢? 不难想到,有以下两种情况。 $ _{1 i m}{ { W_i }} t$。 将一条边权 为 \(dlt\) 的边改为 0(虫洞)后,$ _{1 i m}{ { W_i - dlt }} t 2021-10-04 题解 #二分答案 #最近公共祖先
luogu2446 大陆争霸 题解每个点都必须在到到达所有保护它的点后才能进入,我们用一种类似拓扑排序的方式求解。 设 \(p(x)\) 为能够到达节点 \(x\) 最早的时间,\(q(x)\) 为能够进入节点 \(x\) 最早的时间,\(d(x)\) 为摧毁 \(x\) 最早的时间。 设 \(ind(x)\) 为保护节点 \(x\) 的点的个数。 显然 \(p(x)\) 可以直接用最短路算法求出。 设 \((x \ri 2021-10-02 题解 #最短路