XIX Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia, Division 1.
A
签到。
C
源点向每个软件连边。把每个软件拆成对应版本数个点,每个软件向版本连边。把每个conflict也看成一个点。每个版本向它对应的conflict连边,conflict向汇点连边。没有在conflict里的版本直接向汇点连边。所有边的容量都是$1$,跑最大流即可。conflict的意思也就是这些点最多只能选一个,那么拆点并限制容量即可。
D
把每个点跟它有限制的点加入一个set,加边时用并查集维护,然后启发式合并两个set就行了。
E
签到。
H
这一看到一定是二分啊。然后T了一整场。
在eps到1e-7之后这种写法就很容易T了。
分数二分就用限定一下循环次数。
踩坑
I
题意就是有$n$条线段顺序加入,以及$n$个查询某个点在多少条线段上。
如果输入都是整数的话就是傻逼题。但是这个题输入都是实数,最多到小数点后六位。
把所有输入都乘以$1000000$,然后一个动态开点的线段树可以解决这个问题。
不过写法有点神奇,不用pushup,如果这个点进入了这个区间,那么这个区间的值就对答案有贡献,然后往下走就行了。
要用到llround函数。
J
堆里面存一下当前坐标,到这个地方turn的次数以及当前的MP数。用turn来做优先队列比较的参数。跑迪杰斯特拉就行了。
K
不想做。