luogu P5291 [十二省联考2019]希望】的更多相关文章

luogu loj 无论最终结果将人类历史导向何处 \(\quad\)我们选择 \(\quad\quad\)\(\large{希望}\) 诶我跟你讲,这题超修咸的 下面称离连通块内每个点距离不超过\(L\)的点为中心点.首先可以注意到,所有连通块的共同的中心点一定是个连通块,所以可以写一个暴力状压,表示中心点状态为\(S\)的方案数,然后随便枚举一个连通块转移即可 暴力代码 中心点是连通块很烦,考虑转化一下.其实答案为只考虑中心点为一个点的方案减去只考虑中心点为一条边上的两个点的方案,因为考虑任…
ytq鸽鸽出的题真是毒瘤 原题传送门 题目大意: 有一棵有\(n\)个点的树,求有多少方案选\(k\)个联通块使得存在一个中心点\(p\),所有\(k\)个联通块中所有点到\(p\)的距离都\(\leq L\) 我们先从部分分考虑: 算法1 \(2^{nk}\)枚举联通快判断是否可行 期望得分:8pts 代码就不给了 引理1 对于任意一个联通块,可能成为它的中心点的点组成的集合也是一个联通块.正确性显然 推论 这里作为\(k\)个联通块中心点的点组成的集合是一个联通块 算法2 枚举推论中中心点组…
Preface ZJOI一轮被麻将劝退的老年选手看到这题就两眼放光,省选也有乱搞题? 然后狂肝了3~4天终于打完了,期间还补了一堆姿势 由于我压缩技术比较菜,所以用的都是非打表算法,所以一共写了5K-- 话不多说我们慢慢分析这道神题(真的是慢慢,最后还会放上许多辅助的CODE) Case1~Case3 首先这几个点就是让你熟悉一下题目意思的 我们套路地发现这题由两部分组成,他们的功能编号开头分别为\(1/2\) 然后点开第一个点,发现第一个是数据组数?剩下的输入一个\(x\)然后就输出一个数 通…
这题是最近看到的今年省选题中最良心的一道了吧 看题+想题+写题都可以在0.5h内解决,送分含义明显啊 首先理解了题意后我们很快就能发现两个点如果要被分在一段那么必须在它们的祖先处合并 首先我们考虑下二叉树怎么做,发现如果对于每个节点维护一个堆,然后每次在一个点合并两个儿子的堆 根据简单分析我们发现必然是不断取出两个堆中最大的元素合并直到一个空了为止 那么普通的树怎么做呢,如果你稍微有点经验就会发现这个很好扩展,直接把所有儿子合并即可 但是这样一个元素可能会重复入堆多次,解决方法也很简单,直接启发…
好难写的字符串+数据结构问题,写+调了一下午的说 首先理解题意后我们对问题进行转化,对于每个字符串我们用一个点来代表它们,其中\(A\)类串的点权为它们的长度,\(B\)类串的权值为\(0\) 这样我们根据题意把\(A\to B\)的边连起来,同时每个\(B\)类串向所有以其为前缀的\(A\)类串连边 这样我们就得到了一张DAG(如果不是的话就输出\(-1\)),然后对于它拓扑排序之后求权值和最大链即可 但是第二类边该怎么连呢,下面我们来分析一下具体操作 SA转化问题 首先关于这种前后缀相关的问…
感觉不是很难的一题,想了0.5h左右(思路歪了,不过想了一个大常数的两只\(\log\)做法233) 然后码+调了1h,除了一个SB的数组开小外基本上也没什么坑点 先讲一个先想到的方法,我们对于这种问题显然可以二分第\(k\)大,然后验证有多少个值小于等于它 然后考虑怎么判断,我们建一棵0/1Trie,然后枚举一个右端点,每次把整个Trie异或上这个点的权值 具体实现的话就是不断向下走的过程,当这一位为\(1\)时交换左右子树即可 然后相当于查小于等于一个数的数个数以及和,直接Trie上节点维护…
传送门 首先考虑一个正常的dp,设\(f_{i,j,k}\)为前\(i\)个学校,\(j\)人在\(\color{#0000FF}{蓝阵营}\),\(k\)人在\(\color{#654321}{吔}\)派系的方案,转移枚举选哪个导师就好了,注意一个城市要选同一阵营,所以可以多开一维\(0/1\)表示当前城市在哪个阵营 \(k=0\)的情况,可以发现选\(\color{#654321}{吔}\)派系的\(Yazid\)和\(Zayid\)都会增加\(\color{#654321}{吔}\)派系人…
原题传送门 我用sa做的本题 (码量似乎有点大) 先对原串建sa 考虑如何建图: 从大到小枚举长度len 先将height中等于len的两个位置在并查集合并起来,将lst也合并(lst是链表) 再将长度为len的a串的编号加入所在并查集的lst 然后就珂以查询出每个长度为len的b串所对应a串编号的链表头尾 处理完所有后按加入链表的顺序重新编号 (上面这段见merging函数,语文不好说不清) 现在每个b对应的a的编号都是一段连续的区间 珂以用线段树优化建图 最后跑一下拓扑排序即可得出答案 #i…
思维难度不大,在考上上写的启发式合并写错了,只拿了 60 pts,好难过QAQ 没什么太难的,在考场上想出链的部分分之后很容易就能想到正解.没错,就是非常短的启发式合并.注意一下,写的要漂亮一点,否则会疯狂 TLE.还有一个细节,想交换优先队列时不能直接交换队列,而是对于树中每个节点都存一个在实际队列编号中的位置,计为 $idx[u]$,每次交换 $idx[u]$ 和 $idx[to[v]]$. Code: #include <cstdio> #include <algorithm>…
原题传送门 看见一段的异或和不难想到要做异或前缀和\(s\) 我们便将问题转化成:给定\(n\)个数,求异或值最靠前的\(k\)对之和 我们珂以建一个可持久化01trie,这样我们就珂以求出每个值\(s[a]\)与之前所有的值异或值最大的值\(b\)是多少,把这些所有\((b,a)\)塞进一个堆中 每次从堆顶取元素,设这个元素为\((b,a)\),要将\(b\)加入答案,并且在版本\(a\)的01trie中减去\(s[a]\)^\(b\),再取出\(s[a]\)与01trie中的数异或最大值(原…