省选模拟4
好久不写博客了啊(懒啊)(颓啊)(不想动啊)
_(:з」∠)_
\(T1:\)
容易想到根据包含关系建出一颗树,然后简单DP就行了
考虑怎么建树
首先有个结论
如果一个圆心A被圆B包含,且\(r_A < r_B\),那么圆A被圆B包含(根据不相交的性质易知)
考虑有r的限制关系,把圆按照r从小到大排序
每次用当前圆去覆盖,把所有覆盖到的圆心向当前圆连边并删去,用KD-tree或二维线段树维护即可
\(T2:\)
通过打表可以发现\(ans(n,k)=lcm_{i=n-k+1}^n(i)\)
首先不能直接求,因为lcm过大,且过程中不能取模
考虑分解质因数,对于每个质因子的指数取max即可,复杂度\(O(n^2)\)
考虑优化,构造n个数组D,满足\(\prod_{i=n-k+1}^n D_n[k] = ans(n,k)\)
发现\(D_n\)与\(D_{n+1}\)的差异不大,于是可以通过\(D_n\)来构造\(D_{n+1}\)
首先令\(D_{n+1}[i]=D_n[i] (i \leq n)\),\(D_{n+1}[n+1]=n+1\),显然有问题
考虑对\(n+1\)分解质因子,设\(n+1=p_1^{c_1}*p_2^{c_2}*...p_k^{c_k}\)
对于任意一个\(p_i\)将D数组中最靠后的\(c_i\)个\(p_i\)除去即可,这样构造出的新数组显然满足条件
因为\(\sum c\)是\(log\)级别的,所以每次只会修改\(log\)个位置,用主席树维护
构造复杂度为\(O(nlog^2n)\)
查询时输出第n颗线段树的\(\prod_{i=n-k+1}^n D[i]\)即可
查询复杂度为\(O(Qlogn)\)
\(T3:\)
250行代码,wsl
表示看不懂题解...所以说说我的做法...
首先可以发现这是个仙人掌,而且还是特殊的仙人掌(仙人球???)
它不仅仅满足每条边只在一个简单环内,它还满足每个点只在一个简单环内!!!
容易想到边双缩点,但发现缩完后就不会做了...
仔细分析题目性质可以发现
1.如果s到t的路径上有一个环,那么这个环上的最小边一定满流!
2.如果s和t在一个环上,那么这个环上的最小边一定满流!
3.如果s和t一个在环上一个在环外,那么这个环上的最小边一定满流!
总之,经过的环上的最小边一定满流!
那么我们就可以将每个环上的最小边的容量加到环的其他边上,将原图转化为一颗树,两点的最大流就是链上的最小值
那还要动态修改边权怎么办呢?
发现如果最小边变化的话,树的形态也会发生改变,链上加的权值也会改变
综上所述,我们需要一个数据结构进行以下操作:
1.维护树的形态
2.查询链上的最小值以及其编号
3.链上加一个值
LCT就行了...
于是最终的代码为:
1.tarjan (30行)
2.LCT (100行)
3.大力分类讨论 (60行)
(4.7KB)
。。。。。。。
ps: 数据锅了啊,第8组数据最后面炸了啊!!!