机房测试8.17

高斯消元

题目& 数据范围

样例

num.1

in

4 5 2
1 2 3 1

out

12

num.2

in

1 9 2
1

out

1

num.3

in

3 10 2
1 2 1

out

0

解题法

就是模拟一波又一波。

第一波处理一个循环节内的消消乐情况。

模拟栈的结构,每读到一个数,将其推入栈中,判断是否满足消去条件,

满足就栈指针减k。

第二波处理头尾相消的情况。

两个指针,从两边往里走,能消则消。

然后就是每个循环剩余长度*(m-1)+仅去掉同一循环的剩余数的个数。

糖果镇

当m<=2时,枚举分界点,预处理前缀和就好了。

对于另外20%,直接dp[i][j]表示到点i,j的最优答案。

对于100%,我们可以枚举第二次下行的分界点,然后我们可以统计出第一次下行的影响,就是第一行到x的前缀和减去第二行到x-1的前缀和,第二行就是到枚举端点的前缀和,这样在已知第二次下行的分界点时,第二行和第三行的贡献是已知的,我们只要找到模意义下第一行的最优贡献就好了,这个就可以用set维护,找前驱。

游戏

通过题目可以发现,我们要求的就是在使用最小的点权的情况下选中所有边,每条边都可以被他的两个端点选中,且出入点权可能不同,于是就可以发现这是一个最小点权覆盖。

建边:
1> 先建立虚拟源S和汇T,把每个点拆成两个,ia,ib。
2> 从S向ia连一条流量为wi-的边,从ib向T连一条流量为wi+的边。
3> 原图中的边从ua向vb连一条流量无穷大的边。
4> 然后跑最大流即可。

总结

今天因为A-了第一题,所以Rank很高,但是我网络流竟然写错了,讲过的诶。

终于要放假了。

今晚八点,准时开车!

posted @ 2018-08-17 17:16  LoLiK  阅读(167)  评论(0编辑  收藏  举报