LINK:graph HDU题库里的原题 没做过自闭. 考虑dp 设\(f_{i,j}\)表示前i个点构成j个联通块是树的方案数. 对于一次询问答案即为\(\sum_{j}f_{n,j}j^k\) 考虑如何dp出来 显然每次枚举1号所在的连通块的大小 考虑这个连通块是否构成树 即可. 具体转移不再赘述 需要预处理一下i个点的树的个数 i个点的连通块个数 i个点不是树是连通块的个数. 复杂度\(n^3\) 利用分治NTT来优化可以到 \(n^2log^2\)比较繁杂且不是正解. 正解当然是考虑生成…
LINK:qiqi20021026的T1 考场上只拿到了50分的\(nq\)暴力. 考虑一个区间和一个区间配对怎么做 二分图最大带权匹配复杂度太高. 先考虑LCS的问题 常见解决方法是后缀数组/trie树. 一个贪心是 每次让贡献最大的一对配对是最优的策略. 具体证明可以利用扰动法 或者观察法. 即设\(p,q,l,r\) 分类讨论一下情况就行辣 怎么证明全局最优?可以发现任意两个匹配都是这样最优 交换会变得更差 这样应该可以说明全局最优了吧? 这个贪心直接做复杂度还是很高 可以考虑trie树上…
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述] 小可乐是要登上世界顶峰的男人!为了向他的妹子证明自己的能力,他决定去撒哈拉沙漠找到依米花送给他的妹子. 假设途中经过N个地区,编号为1~N,小可乐一开始在编号为1的地区,编号为N的地区代表撒哈拉沙漠,地区之间由于地形差别悬殊,并不是都可以直连的.同时由于不同经度存在时差,小可乐看了当地的地方时会…
算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然存在一个深度最浅的点且唯一 所以随便找一个点做根然后对自己子树内寻找答案就可以是正确的. 考虑另外的30%的数据k<=3 可是颜色数最多可以有n个 不知道哪个是最终答案. 一次状压dp的复杂度:\(2^{2k}\cdot n\) 容易得到可以暴力枚举一下 然后要做 \(C(n,3)\) 这样会TLE…
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧张起来!!! 好了不扯淡了... -------------------------------------------------------------------------------------------------------------------------------------…
其实直接暴力O(n3)DP+O2O(n^3)DP+O_2O(n3)DP+O2​优化能过- CODE O(n3)O(n^3)O(n3) 先来个O(n3)O(n^3)O(n3)暴力DP(开了O2O_2O2​)100分代码(极限数据0.5s0.5s0.5s) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 2005, INF = 0x…
LINK:生成树 这场比赛我打的真失败 T3是比较容易的 却一直刚 那道"数论" 10分其实搜一下全排列. 30分容易想到对边进行装压dp. 不过存在一些细节 可以对于一个连通块的壮大进行装压 也就是每次需要联通两个块的时候使用关键边 然后再这两个块之间加边知道加满需要其他边. 复杂度 \(2^{21}\cdot 21\cdot 6\) 可能能过或许是我的做法不太行? 值得一提的是这样是无标号的需要最后乘以一个阶乘. 可以发现之所以装压边是为了防止 一些边的添加使得最小生成树变化. 可…
LINK:探险队 非常难的题目 考试的时候爆零了 完全没有想到到到底怎么做 (当时去刚一道数论题了. 首先考虑清楚一件事情 就是当前是知道整张地图的样子 但是不清楚到底哪条边断了. 所以我们要做的其实就是选择最优的路线 使得遇到断边情况下是最优的. 可以发现在某个点出现断边的时候 此时断的一定是这个点到终点最短路上的边 这样是最差的结果. 那么其实就是断边只会断由T发出的最短路树上的边. 到达某个点知道断边之后 其实要求出断开这条边再到T的最短路. 暴力是\(nm\cdot logn\)的 考虑…
这是一道非常垃圾的题目 且 数据范围简直迷惑选手.. 可以发现 题目中有 边权递增 边的条数 所有边权值不同 最小边权和等条件. 看起来很难做 一个想法 边权递增+边的1的权值都不相同可以想到 关系存在于边的话应该是一张DAG. 所以 可以把边化点建图 暴力建图是\(n^2\)的 采用归并排序+前缀和优化建图就是线性的了. 然后考虑在这张DAG上搞事情 发现边的条数很难做. 怎么做都需要一个dp数组\(f_{i,j}\)表示到达i此时经过的路径数为j的最小权值. 状态数很多 尽管转移可以拓扑排序…
(啊啊啊 什么考试的时候突然降智这题目硬生生没想出来. 容易发现是先走到某个地方 然后再走回来的 然后在倒着走的路径上选择一些点使得最后的得到的最多. 设\(f_{i,j}\)表示到达i这个点选择的价值为j的最大获得的值 这显然是一个01背包. 然后不断更新答案即可.可以直接从前往后坐.复杂度\(n\cdot m\) code //#include<bits\stdc++.h> #include<iostream> #include<iomanip> #include&…