06 2019 档案

摘要:从本质入手,这个东西影响取值的就是相邻两个哪个先取 设f[i][0/1]为前i个(i 1,i)中先取i/i 1的值(这里不算上i的贡献 转移就显然了,注意要先复制 inf cpp include include using namespace std; const int N=3005; int n 阅读全文
posted @ 2019-06-17 21:14 lokiii 阅读(264) 评论(0) 推荐(1)
摘要:首先看这样做的特点,就是分到最后小块里的点合并上去的时候相对顺序不变,所以先加上块内逆序对的期望 合并的时候一定是一边卡住一个大值,另一边跳指针,所以把一个值向右直到有大于它的值位置的一段区间看作一段 当前合并两块合并到第i个和第j个,如果i和j都是块的开头就一定不会构成逆序对,因为双指针的时候会直 阅读全文
posted @ 2019-06-17 17:00 lokiii 阅读(254) 评论(0) 推荐(1)
摘要:设f[i]为i个积木能堆出来的种类,g[i]为i个积木能堆出来的种类和 $$ f[n]=\sum_{i=1}^{n}C_{n}^{i}g[n i] $$ $$ g[n]=\sum_{i=1}^{n}C_{n}^{i}f[n i]+g[n] $$ 理解就是选出包含最后一个的块,然后剩下的按照之前的拼 阅读全文
posted @ 2019-06-17 09:33 lokiii 阅读(169) 评论(0) 推荐(0)
摘要:区间不交叉,可以看出区间构成了树形结构,建出树之后,设f[u][i]为u这个区间最大值最多加i的概率,转移是\\( f[u][i]=p[u]\ \prod f[v][mxu mxv 1]+(1 p[u])\ \prod f[v][mxu mxv] \\) 注意要理性选择建树方式,扫描就行了,不要瞎二 阅读全文
posted @ 2019-06-16 17:28 lokiii 阅读(169) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-06-15 21:15 lokiii 阅读(1) 评论(0) 推荐(0)
摘要:首先看这个范围很夸张但是其实有限制的也就在1e18\ n范围里(走完一圈的边权),然后限制一定是有负环 用Floyd传递闭包,然后设f[i][j][k]为从1走了i步到j并且有k个x的最短路,用B F处理,然后有负环就是kx+f[n][i][k] include include include in 阅读全文
posted @ 2019-06-14 20:26 lokiii 阅读(272) 评论(0) 推荐(0)
摘要:首先恋人操作过一轮之后逆序对不会变多,所以设f[i]为把i个逆序对消掉的期望次数,f[i]=0.5f[i 2]+0.5f[i]+2,化简然后递推即可 cpp include include using namespace std; const int N=3005; int n,m,a[N]; do 阅读全文
posted @ 2019-06-14 11:15 lokiii 阅读(152) 评论(0) 推荐(0)
摘要:有一种限制下界强制选的,但是也可以不用 把每个格点拆成两个,一个连s一个连t,对于不是必选的连中间连流量1费用0边表示不选,然后黑白染色,黑点连横着白点连竖着,边权就是这条水管的权值,然后跑最大费用最大流 然后判断不可能就是不满流 并且这样可以满足每个被选的格子都在一个环上,因为他一定唯一对应另一个 阅读全文
posted @ 2019-06-14 11:00 lokiii 阅读(784) 评论(0) 推荐(0)
摘要:任意k个都可以,也可以看做把不行的都选了,再随便选一个可以的要选的数量 把区间和m个值都排序,区间按l一序r二序排,枚举m个值,小根堆维护能帮韩当前枚举值的区间的右端点,这样方便删除区间,然后剩下的就都不行,所以ans=max(n size+1) 注意枚举完要弹出一个区间,表示这个区间属于当前枚举值 阅读全文
posted @ 2019-06-13 17:20 lokiii 阅读(241) 评论(0) 推荐(0)
摘要:先跑spfa求出最短路构成的DAG,然后在DAG上跑出支配树dfs出size取max即可 关于支配树,因为是DAG,支配点就是入点在支配树上的lca,所以一边拓扑一边预处理倍增,然后用倍增求lca cpp include include include include include using n 阅读全文
posted @ 2019-06-13 15:54 lokiii 阅读(163) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-06-13 11:08 lokiii 阅读(1) 评论(0) 推荐(0)
摘要:容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2 include include include using namespace std; const int N=200005,M=316000 阅读全文
posted @ 2019-06-11 19:35 lokiii 阅读(291) 评论(0) 推荐(0)
摘要:考虑当前合法的一个点集s,如果他合法,那么一定有一个完备匹配的点集包含这个点集,也就是两边都满足hall定理的话这两边拼起来的点集也满足要求 所以分别状压两边点集用hall定理转移判断当前点集是否合法,然后分别对两边点集的权值和排个序2point扫一下计算答案即可 阅读全文
posted @ 2019-06-11 15:03 lokiii 阅读(332) 评论(0) 推荐(0)
摘要:方案二选一,显然是最小割,朴素的想法就是一排人点一排边点,分别向st连流量1的边,然后人点向路径上的边点连流量inf的边跑最大流 但是路径可能很长,这样边数就爆了,所以考虑倍增,然后倍增后大区间向小区间连,这样路径只要连向log个区间就行了,然后跑最大流 输出方案是在残量网络上从s点沿着没满流的边b 阅读全文
posted @ 2019-06-11 09:37 lokiii 阅读(248) 评论(0) 推荐(0)
摘要:分别给行和列hash建两排点,对(x,y)坐标连x行y列的点 设红色价格低,那么就要尽量多选红色 设一个点出度为s,要求最小的最大差值为d,又,假设有流量表示选红没流量表示选蓝,那么要求就变成了这个点的01边差至少为d,列一下式子就是这个点的流入(或者流出)流量可行区间为[(s d)/2,(s+d) 阅读全文
posted @ 2019-06-10 21:01 lokiii 阅读(234) 评论(0) 推荐(0)
摘要:首先假设全睡觉,然后用费用流考虑平衡要求建立网络流 把1~n的点看作是i k+1~k这一段的和,连接(i,i+k,1,e[i] s[i]),表示把i改成吃饭,能对i~i+k 1这一段的点产生影响;然后连接(i,i+1,k ms me,0),这是除了限额外可以随便选的(i+k,i+1 n就连到t) 然 阅读全文
posted @ 2019-06-08 18:23 lokiii 阅读(449) 评论(0) 推荐(0)
摘要:因为没有重复串,所以把有包含关系的串连边之后是个DAG,也就是二分图,就变成求二分图的最大独立集=n 最小点覆盖=n 最大匹配 关于包含关系,建出AC自动机,然后把串放上去找子串,但是如果每次都一路找到根就会T,所以每次只找最近的一个,并且对于没有结尾id的点承接father的id,这样就O(1)的 阅读全文
posted @ 2019-06-01 23:34 lokiii 阅读(407) 评论(0) 推荐(0)
摘要:因为是字典序所以贪心选当前能选的最小的,所以问题就在于怎么快速计算当前这个位置能不能选枚举的字母 重排之后的序列是可以和原序列完美匹配的,而完美匹配需要满足hall定理,也就是左边任意k个集合一定和右边至少k个点相连 又一共6个字符,原序列中相同字符点连出的点集是一样的,所以只要2^6个字符集合满足 阅读全文
posted @ 2019-06-01 15:52 lokiii 阅读(244) 评论(0) 推荐(0)