码迷,mamicode.com
首页 > 其他好文 > 详细

省选模拟4

时间:2020-01-11 11:51:31      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:改变   特殊   数据   不能   题解   二维线段树   lin   关系   分析   

好久不写博客了啊(懒啊)(颓啊)(不想动啊)
_(:з」∠)_

\(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组数据最后面炸了啊!!!

省选模拟4

标签:改变   特殊   数据   不能   题解   二维线段树   lin   关系   分析   

原文地址:https://www.cnblogs.com/Gkeng/p/12179105.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!