考场上不要写没把握的方法
一道题有思路别得意,反复尝试去hack自己…
不要浪…
认真去想每一个暴力分
今天比赛打得太差了…
好蠢啊 …
t1好sb啊…随便想了个错误的做法就写了…蠢死了…
t2是个网络流,题意:
给定n*m的网格,其中有k个球,选择每一行、每一列要付出不同的代价,一个球所在的行或列或行列被选择或行列都没被选择会获得不同的价值。最大化价值。
对于每行每列建一个点,代价是在两个元素之间产生的。
考虑最小割。
认为与s相连为选择,t为不选。
考虑x,y两个点,我们需要先拿到所有收益,然后建出一些边来,割掉某些边代表不能获得这些收益/需要付出这么多代价,跑一边最小割即可。
怎么定边权?
我们可以列出一些方程组,表示你的选择情况与对应舍弃的花费。
然后可以把边权解出来。
由于存在自由变量,我们可以钦定一些边权,使得其余边权存在唯一解,并且每一种割集都对应一种合法的选法。
参考二元关系网络流:
一篇不错的论文:《最小割模型在信息学竞赛中的应用》
一些数据结构题
1.抓企鹅(四维数点)
题意:给定四维空间的n个点,求每一维都小于某个点的点的数量。
sol:
分块
按第一维排序,对第二维分块,每个块按第三维排序,然后维护主席树 。
O(nn−−√ log2n)
O
(
n
n
l
o
g
2
n
)
2.bzoj 3483
题意:
n个串,每次给s1,s2,求有多少串满足s1是它的前缀并且s2是它的后缀。
sol:
s1为前缀的集合与s2为前缀的集合的交。
把n个串正反向排序,就是二维偏序。
每个串看成(x,y)。
相当于求x属于一个区间并且y属于一个区间的点的数量。