BZOJ水题计划
题号 | 题目描述 | 解题思路 |
---|---|---|
3306 | 给出一棵带点权的有根树,支持单点修改,换根,询问x子树中的权值最小值. | 直接在DFS序上用线段树维护就好了. |
3900 | 给出n个数对,求最小的交换次数,满足交换后每个数对相差不超过c | 压位,用\(f[i]\)表示\(i\)状态的数对满足条件的最小操作次数,初始时\(f[i]\)如果有解,那么答案至少为操作数对-1,然后\(f[i]=min(f[j]+f[i\text{^}j])\)修正一下就好了. |
3901 | 给定一个\(n*n\)的棋盘(\(n\)为奇数),每个格子上有数,设\(X=(n+1)/2\),每次可以将一个\(X*X\)的子棋盘的所有数乘-1,求所有数之和的最大值. | 考虑不管子棋盘怎么选,X行X列一定有数会被选上,考虑\(a[1][i],a[1][X],a[1][i+X]\)的关系,发现他们是否被操作的异或值一定为0,因为任意的操作只会包含他们三个点中的其中两个或零个,然后其他行以及列也有这种关系,枚举X行前X个格子的操作情况,得出X行的情况,然后每一行第X列的情况枚举前\(i\)个格子的情况,显然这个贡献单独考虑,所以刷个最大值就行.复杂度\(O(2^XX^2)\) |
3920 | 给出一个长度为\(n\)的序列,询问一个区间数字出现次数第\(k1\)小的第\(k2\)小的数. | 分块套分块?神奇的叫法. 把(数字,数字出现次数)看成一个二元组,二元组的个数为\(n\),然后我们用莫队维护这个二元组即可,首先数字出现次数一个分块,然后相同出现次数的数用个分块. |
3689 | 给出\(n\)个数,两两异或可以得到\(n*(n-1)/2\)个值,求前\(k\)小的值. | 额,对于每个数肯定先找第一小然后第二小... 用个堆维护一下每个数当前的最小异或值,查询一个数第\(k\)小异或值一棵字典树就行. |
4011 | 给出一张有向无环图和一条任意边,求以\(1\)为根的外向树的个数. | 根据朱刘算法(???),有向无环图的外向树个数为除根以外所有点入度的乘积.感觉脑补一下就行,每个点随便选个fa就可以形成一棵树...现在多了一条边,那么减去成环的方案数就行.成环的方案数应该是\(\sum\)所有\(y\)->\(x\)的路径(设为\(S\))\(\prod_{x\not\in S}dgree[x]\),在拓扑序上DP就行. |