题面 洛谷 Bzoj 题解 很容易想到$O(nk)$的树形$dp$吧,设$f[i]$表示处理完这$i$颗子树的最小花费,同时再设一个$mi[i]$表示$i$到根节点$1$路径上的距离最小值.于是有: $ f[i]=\sum min(f[son[i]], mi[son[i]]) $ 这样就有$40$分了. 考虑优化:这里可以用虚树来优化,先把所有点按照$DFS$序进行排序,然后将相邻两个点的$LCA$以及$1$号点加入进$LCA$,然后虚树就构好了,考虑欧拉序的特殊性质,所以再还原出欧拉序,在上面…
这道题的内存…………………真·精神污染……….. 这道题的思路很明了,我们就是要找每一个路径包含了多少其他路径那么就是找,有多少路径的左右端点都在这条路径上,对于每一条路径,我们随便选定一个端点作为第一关键字,另一个作为第二关键字,于是就有了两维限制,按照主席树的一般思路,我们把建树顺序作为一维,然后在里面维护另一维,那么我们在外面限制第一关键字,就是在树上建主席树,查询减LCA,在里面的话我们把每个点作为第一关键字对应的第二关键字,放入主席树,而主席树维护的是欧拉序区间,所以我们每次查询只用查…
3813: 奇数国 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 755  Solved: 432[Submit][Status][Discuss] Description 在一片美丽的大陆上有100000个国家,记为1到100000.这里经济发达,有数不尽的账房,并且每个国家有一个银行.某大公司的领袖在这100000个银行开户时都存了3大洋,他惜财如命,因此会不时地派小弟GFS清点一些银行的存款或者让GFS改变某个银行的存款.该村子在财产上的求…
[bzoj3813]: 奇数国 题意:给定一个序列,每个元素可以分解为最小的60个素数的形式.(x=p1^k1*p2^k2*......p60^k60)(p1=2,p2=3,…,p60=281) 支持单点修改,查询一段区间的积的欧拉函数 mod 19961993(是一个质数). 线段树维护区间积x,bitset b[i]记录第i个素数是否存在. 预处理inv[i]=(p[i]-1)/p[i] mod 19961993 ans=x*inv[i] (b[i]==1) /* http://www.cn…
题面 传送门 思路 这题目是真的难读......阅读理解题啊...... 但是理解了以后就发现,题目等价于: 给你一个区间,支持单点修改,以及查询一段区间的乘积的欧拉函数值,这个答案对19961993取模 这里是欧拉函数的原因显然,题目中的那个不相冲实际上就是扩展欧几里得里面的那个定理,要满足不相冲(也就是方程有解),$product$和$number$必须互质 序列当中,每个元素大小不超过1e6,质因数都是前60个 那么我们显然可以开一棵线段树来维护这个区间乘积,但是怎么处理欧拉函数呢?$O(…
题目链接 传送门 题面 思路 设\(x=\prod\limits_{i=l}^{r}a_i\)=\(\prod\limits_{i=1}^{n}p_i^{c_i}\) 由欧拉函数是积性函数得: \[ \begin{aligned} \phi(x)&=\phi(\prod\limits_{i=1}^{n}p_i^{c_i})&\\ &=\prod\limits_{i=1}^{n}\phi(p_i^{c_i})&\\ &=\prod\limits_{i=1}^{n}p_…
调了半天,写线段树老是写炸 /* 两个操作 1.区间乘法 2.区间乘积询问欧拉函数 欧拉函数计算公式 phi(mul(ai))=mul(ai) * (p1-1)/p1 * (p2-1)/p2 * .. * (pk-1)/pk 因为只有300以内的质数(62个)用一个long long来状态压缩 因此线段树结点维护住区间的质数状态集合S,区间的乘积 操作1 [l,r] x:把x质因数分解,然后更新S,然后再更新乘积, 操作2 [l,r]:询问到区间的状态集合S,区间的乘积,再求逆元进行除法 先把6…
http://codeforces.com/problemset/problem/383/C 题目就是说,  给一棵树,将一个节点的值+val, 那么它的子节点都会-val, 子节点的子节点+val........这样类推, 给一系列操作,2是查询一个节点的值, 1是将一个节点的值+val. 首先,<dfs一遍求出dfs序以及每个点的深度, 然后建两颗线段树, 深度为奇数的建一棵, 偶数建一棵. 改变一个节点的值, 就把与他奇偶相同的那颗树全都+val, 不同的全都-val. 具体看代码>..…
这题刚开始看成求区间$\phi$和了........先说一下区间和的做法吧...... 就是说将题目的操作2改为求$(\sum\limits_{i=l}^{r}\phi(a[i]))\%P$ 首先要知道phi有公式$\phi(x)=x\prod\frac{p_i-1}{p_i}$ 只要维护每个数的模1e9+7值, 以及他包含的素数向量就好了 具体实现用线段树维护, 乘积直接打标记乘即可 对于素数向量的维护, 相当于是一个区间$or$, 直接暴力就好, 因为最坏情况相当于300次对所有点单点更新…
由扩展欧拉定理,a^(a^(a^(……^x)))%p中x作为指数的模数应该是φ(φ(φ(φ(……p)))),而p取log次φ就会变为1,也即每个位置一旦被修改一定次数后就会变为定值.线段树维护区间剩余修改次数的最大值,暴力修改即可. 可以预处理出每个位置进行k次操作后的值.直接计算是log^3的,会被卡常.考虑类似bsgs的分块,将指数拆成<10000和10000m两部分,预处理后即可O(1)查询,避免每次快速幂. 注意当指数<φ(p)不能加φ(p). #include<iostream…