yxy小蒟蒻的201110总结

2020.11.10 周二

今天A题时间算错了 B题被hack掉了(所以这体现了自己hack自己的能力多么重要

然后T4是我第一次写树套树吧 思想挺妙的 求lcp可以用线段树二分确实没想到

话说noip不会考树套树吧 (虽然没让我手写平衡树

A

给一个 n n n 个节点 m 条边的无向图, 有 k k k 轮操作, 每轮操作是选择尽量多的边删除, 如果有多种方案, 那么选择边权和最大的那个, 但是要求删除的边中不存在环.

对于每条边, 输出它在第几次操作被删除, 如果这条边最后都没有被删除那么输出 0 0 0.

每次都是找最大生成树 找到的边就删除

给边排序

枚举每条边 二分是可以插入哪一次的生成树

k k k 个并查集

B

有一个 n × n n\times n n×n 的黑白棋盘. 你需要用一些操作将整个棋盘变成全黑.

一次操作首先选择一行 i, 一列 j, 记 c 1 , c 2 , ⋯   , c n c_1, c_2, \cdots, c_n c1,c2,,cn ( i , 1 ) , ( i , 2 ) , ⋯   , ( i , n ) (i, 1), (i, 2), \cdots, (i, n) (i,1),(i,2),,(i,n)的颜色. 之后将 ( 1 , j ) , ( 2 , j ) , ⋯   , ( n , j ) (1, j), (2, j), \cdots, (n, j) (1,j),(2,j),,(n,j) 的颜色对应涂成 c 1 , c 2 , ⋯   , c n c_1, c_2, \cdots, c_n c1,c2,,cn .

求最少的操作次数. 如果无法成功, 输出 − 1 -1 1 .

构造题 先把一行涂黑 再把竖列不是全黑的涂黑

有细节 要学会自己 h a c k hack hack 自己

C

给定两个数 n , m n, m n,m 求有多少长度为 2 m 2m 2m 的序列 A A A 满足 A A A 中每个元素都是 n n n 的因数, 且 A A A 所有项的乘积不超过 n m n^m nm. 答案对 998244353998244353 998244353998244353 998244353998244353 取模.

呃呃呃呃 结论题

显然乘积小于 n m n^m nm 和大于 n m n^m nm 的方案个数是相等的

所以就是求等于 n m n^m nm 的方案数 因为每种质因数是独立的 所以直接背包做

D

有一棵深度为 n n n 的满二叉树, 初始每个节点都没有标记.

维护一个 n n n 位二进制数 x x x, 它对应了树根到叶子的一条路径: x x x 从高到低的每个二进制位表示下一步走向左儿子(这一位是 0 0 0)还是右儿子(这一位是 1 1 1).

初始 x = 0 x=0 x=0. 有 m m m 次操作, 每次操作令 x : = ( x + 2 c i )   m o d   2 n x := (x + 2^{c_i})\bmod 2^n x:=(x+2ci)mod2n , 然后将树上这条路径的所有节点打上标记. 每次操作后, 你需要输出有标记的节点个数.

题目可以转化为每次给你一个长度为 n n n 的零一串 每次询问和之前给出的串的 l c p lcp lcp 的最大值

因为串长是 1 e 5 1e5 1e5 级别的 所以直接求 l c p lcp lcp 不好求 而且也不能建 t r i e trie trie

所以我们给每个串维护一颗区间线段树 维护的值是对应串的区间的哈希值

因为最新的串是它前一个串的一段区间取反 所以可以用主席树 空间就能开下了

l c p lcp lcp 可以看作是求从高到底位 第一个不相等的位置(判断是否相等可以用哈希值比较 )

那么可以线段树上二分找 l c p lcp lcp 同理可以判断两个串的二进制大小(第一个不相等的位置为1的串大)

又因为和当前串的 l c p lcp lcp 最长的串 一定是按二进制排序下它的前驱或者后继

那么可以把它之前的串全放进一个 s e t set set 比较大小就在线段树上二分 本质上是树套树

posted @ 2022-10-10 20:19  缙云山车神  阅读(6)  评论(0编辑  收藏  举报