省选联考2021vp记
考虑到将 和 放在一起排序,最后朝上的数字必然在左端点为最小值,右端点为最大值的区间中。这个区间中至少有 个是原来的 ,且对于每张卡牌必然要有 或 在区间中。使用双指针即可实现。
vp时做 的部分分时想到:
又因为还有 的限制条件,想到差分约束,但没有什么实际的做法。
又想到放下限制,产生了一种构造方法,将第一列和第一行设为 ,剩下的就可以直接计算。但这种构造会产生大于 或小于 的解,但没有优化方法。
考虑正解,因为上述方法的解是未满足约束的。有一个性质:使某一行或某一列的奇数位 ,偶数位 最后生成的 数组不变。
所以最后会产生一个矩阵( 表示根据上述方法构造出的解, 表示第 行的变化量, 表示第 列的变化量)
但这个矩阵看起来不是很可做考虑将奇数列的变化量取反,偶数行的变化量取反,得到新矩阵
得到的矩阵中 和 的关系都是满足 或 ,为只与减法有关的不等式,可以使用差分约束算出解。
vp时把结论推错了,非常可惜。
一个很重要的结论:若点对 对图 有贡献,当且仅当 且在图 上存在由 到 和由 到 都只经过编号在 的点的路径,考虑如何通过这个计算。显然去计算每个 的值是非常不现实的,直接考虑点对 对 函数的贡献。一个点对的贡献是一段前缀,因此可以倒序加边求差分数组。
现在问题就到了如何求差分数组上了。令 表示由 到 且只经过编号属于 的路径中边的编号的最小值最大为多少,可以写出转移式 :
初始若 间有边 , 为边 的编号,。
这个式子很像 Floyd
的式子,但如果直接写 Floyd
, 的复杂度会T。优化一些无用转移,因为 产生贡献时只会经过编号 的点,所以当 没必要进行转移。因为CCF数据太水放过去了。
非常典的树上倍增。
先将所有颜色重新标号。若 答案为 ,从 到 的路径上必然会按顺序出现标号为 的颜色。将路径拆成 和 , 上会按顺序出现编号为 的颜色, 上会按顺序出现编号为 的点。 可以通过二分得到,那么需要计算的就只有 的值了。令 表示在 上,深度最深的颜色为 点为哪个点, 表示在 上,深度最深的颜色为 点为哪个点,通过倍增可以找到在 上可以找到的最大的 和 上可以找到的最小的 ,记为 。若 ,则该 满足条件。
那么现在就只剩下一个问题了,如何求得在 上的颜色为 且深度最深的点。建一棵下标为颜色的主席树,点 的线段树表示在 上每个颜色的最深点的位置,每次在父亲的线段树上修改 的最深点的位置为 。
总复杂度 。
根据一些简单的结论:
- 若 支配 , 支配 ,则 一定支配 ,因为删除 后 被割开,而 一旦不可达 也就随之不可达了。
- 若 支配 , 支配 ,则 之间一定有支配关系,如不然则必定有一种情况,使得删除其中一个点后, 可从另一个点到达 。
- 加入一条边后每个点的受支配集要么变小要么不变,因为图会变得更联通。
- 在点 中必然存在一个点 ,使得 ,因此该点为 中支配集最大的点,令 。
- 若 大小变化,当且仅当 大小变化或 不在支配 。
根据前四条结论我们可以建出一颗树状结构,每个点 和 连边,这颗树叫做支配树。令 表示删除 后 能否到 ,可以得知若 ,则 支配 ,这样就用 的时限求出所有 ,建出支配树。
那么现在剩下的任务就只剩下判断 是否仍然支配 了。令 表示删去 后 能否到达 ,这个在反图上dfs
一边可以求出。对于加的一条边 ,若删去 后 能到 且删去 后 能到 ,则 大小会发生变化。再根据第五条结论,在支配树上bfs
一遍就能求出所有受支配集变化的点。
因为题目要求的是排名的总方案数,所以考虑贪心地分配 。若 ,令 $b_i=b_{i-1}},否则令 ,最后如果剩下多的可以全部留个 。对贡献变形可得:
令 表示前 位为 内元素,第 位为 ,已选总贡献为 的方案数。
for(int i=1;i<=mx;i++){
Count[i]=Count[i>>1]+(i&1);
}
for(int i=0;i<n;i++){
int s=n*(a[t]-a[i]+(t<i));
if(s<=m){
f[1<<i][i][s]=1;
}
}
for(int i=1;i<mx;i++){
for(int j=i;j;j-=lowbit(j)){
for(int sum=0;sum<=m;sum++){
int p=num[lowbit(j)];
for(int k=0;k<n;k++){
if(!(i&(1<<k))){
int s=sum+(n-Count[i])*max(0,(p<k)+a[p]-a[k]);
if(s<=m){
f[i|(1<<k)][k][s]+=f[i][p][sum];
}
}
}
}
}
}
for(int i=0;i<=m;i++){
for(int j=0;j<n;j++){
ans+=f[mx][j][i];
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】