P2605基站选址
题解看不懂啊
为什么要用线段树维护维护f+pay的最小值?第一篇题解说
pay[k][i]表示从第k个村庄到第i个村庄的赔偿费用之和
对于每一个村庄,都有一个范围内需要建立基站,否则就要赔偿,那么我们设第i个村庄的范围为[L,R],如果正在考虑R处建不建基站,那么有下列情况:
1、不在R处设立基站,那么对于村庄i来说,上一个基站在[1,L−1]这个区间的话,就要赔偿村庄i了,因为[L,R]这个区间没有建基站,那么我们就要快速的在[1,L−1]中区间加村庄i的赔偿费用了,我们就以线段树为例
2、在R处建立基站,那么也就相当于最后一个基站设立在[1,R−1]这个区间中,找一个费用最小值来转移嘛,还是线段树
所以我们要开一个线段树来维护 f+pay 的最小值,要有区间加法和区间查询的操作
那么为了上面的操作,我们还要开几个数组辅助
st[i]表示第i个村庄对应区间的左端点L
ed[i]表示第i个村庄对应区间的右端点R
那么当edx=i的时候,如果i处不建,那么就要区间加上pay[x]的值,然而可能有很多点的ed都是ii,所以我们用链式前向星来保存
什么是第$i$个村庄对应区间?f是啥?