省选联考2021vp记
考虑到将 \(a\) 和 \(b\) 放在一起排序,最后朝上的数字必然在左端点为最小值,右端点为最大值的区间中。这个区间中至少有 \(n-m\) 个是原来的 \(a\),且对于每张卡牌必然要有 \(a\) 或 \(b\) 在区间中。使用双指针即可实现。
vp时做 \(m=2\) 的部分分时想到:
\(b_i-b_{i-1}=a_{i+1,1}+a_{i+1,2}-a_{i-1,1}-a_{i-1,2}\)
\(b_i+b_{i-2}-b_{i-1}=a_{i+1,1}+a_{i+1,2}+a_{i-2,1}+a_{i-2,2}\)
又因为还有 \(0\le a_{i,j}\le 10^6\) 的限制条件,想到差分约束,但没有什么实际的做法。
又想到放下限制,产生了一种构造方法,将第一列和第一行设为 \(0\),剩下的就可以直接计算。但这种构造会产生大于 \(10^6\) 或小于 \(0\) 的解,但没有优化方法。
考虑正解,因为上述方法的解是未满足约束的。有一个性质:使某一行或某一列的奇数位 \(+x\),偶数位 \(-x\) 最后生成的 \(b\) 数组不变。
所以最后会产生一个矩阵(\(a_{i,j}\) 表示根据上述方法构造出的解,\(r_i\) 表示第 \(i\) 行的变化量,\(c_j\) 表示第 \(j\) 列的变化量)
\(\begin{bmatrix}a_{1,1}+r_1+c_1,a_{1,2}-r_1+c_2,a_{1,3}+r_3+c_3,\dots\\
a_{2,1}+r_2-c_1,a_{2,2}-r_2-c_2,a_{2,3}+r_2-c_3\dots\\
a_{3,1}+r_3+c_1,a_{3,2}-r_3+c_2,a_{3,3}+r_3+c_3\dots\\
\dots
\end{bmatrix}\)
但这个矩阵看起来不是很可做考虑将奇数列的变化量取反,偶数行的变化量取反,得到新矩阵
\(\begin{bmatrix}a_{1,1}+r_1-c_1,a_{1,2}-r_1+c_2,a_{1,3}+r_3-c_3,\dots\\
a_{2,1}-r_2+c_1,a_{2,2}+r_2-c_2,a_{2,3}-r_2+c_3\dots\\
a_{3,1}+r_3-c_1,a_{3,2}-r_3+c_2,a_{3,3}+r_3-c_3\dots\\
\dots
\end{bmatrix}\)
得到的矩阵中 \(r_i\) 和 \(c_j\) 的关系都是满足 \(-a_{i,j}\le r_i-c_j\le 10^6-a_{i,j}(i+j\equiv 0 \pmod 2)\) 或 \(-a_{i,j}\le c_j-r_i\le 10^6-a_{i,j}(i+j\equiv 0 \pmod 2)\),为只与减法有关的不等式,可以使用差分约束算出解。
vp时把结论推错了,非常可惜。
一个很重要的结论:若点对 \((u,v)\) 对图 \(G\) 有贡献,当且仅当 \(u<v\) 且在图 \(G\) 上存在由 \(u\) 到 \(v\) 和由 \(v\) 到 \(u\) 都只经过编号在 \([u+1,n]\) 的点的路径,考虑如何通过这个计算。显然去计算每个 \(f(u,v)\) 的值是非常不现实的,直接考虑点对 \((u,v)\) 对 \(h\) 函数的贡献。一个点对的贡献是一段前缀,因此可以倒序加边求差分数组。
现在问题就到了如何求差分数组上了。令 \(f_{u,v}\) 表示由 \(u\) 到 \(v\) 且只经过编号属于 \([u+1,n]\) 的路径中边的编号的最小值最大为多少,可以写出转移式 :
\]
初始若 \((u,v)\) 间有边 \(f_{u,v}=i\),\(i\) 为边 \((u,v)\) 的编号,\(f_{u,u}=m+1\)。
这个式子很像 Floyd 的式子,但如果直接写 Floyd,\(O(n^3)\) 的复杂度会T。优化一些无用转移,因为 \((u,v)(u<v)\) 产生贡献时只会经过编号 \(>u\) 的点,所以当 \(u>w&&v>w\) 没必要进行转移。因为CCF数据太水放过去了。
非常典的树上倍增。
先将所有颜色重新标号。若 \((s,t)\) 答案为 \(x\),从 \(s\) 到 \(t\) 的路径上必然会按顺序出现标号为 \(1\sim x\) 的颜色。将路径拆成 \((s,lca)\) 和 \((lca,t)\),\((s,lca)\) 上会按顺序出现编号为 \(1\sim y\) 的颜色,\((lca,t)\) 上会按顺序出现编号为 \(y+1\sim x\) 的点。\(x\) 可以通过二分得到,那么需要计算的就只有 \(y\) 的值了。令 \(f1_{u,i}\) 表示在 \((u,1)\) 上,深度最深的颜色为 \(col[u]+2^i\) 点为哪个点,\(f2_{u,i}\) 表示在 \((u,1)\) 上,深度最深的颜色为 \(col[u]-2^i\) 点为哪个点,通过倍增可以找到在 \((s,lca)\) 上可以找到的最大的 \(y\) 和 \((lca,t)\) 上可以找到的最小的 \(y\),记为 \(y'\)。若 \(y'<=y\),则该 \(x\) 满足条件。
那么现在就只剩下一个问题了,如何求得在 \((u,1)\) 上的颜色为 \(x\) 且深度最深的点。建一棵下标为颜色的主席树,点 \(i\) 的线段树表示在 \((i,1)\) 上每个颜色的最深点的位置,每次在父亲的线段树上修改 \(col_u\) 的最深点的位置为 \(u\)。
总复杂度 \(O(n^3)\)。
根据一些简单的结论:
- 若 \(x\) 支配 \(y\),\(y\) 支配 \(z\),则 \(x\) 一定支配 \(z\),因为删除 \(x\) 后 \(y\) 被割开,而 \(y\) 一旦不可达 \(z\) 也就随之不可达了。
- 若 \(x\) 支配 \(a\),\(y\) 支配 \(a\),则 \(x,y\) 之间一定有支配关系,如不然则必定有一种情况,使得删除其中一个点后,\(1\) 可从另一个点到达 \(a\)。
- 加入一条边后每个点的受支配集要么变小要么不变,因为图会变得更联通。
- 在点 \(D_x(x\not=1)\) 中必然存在一个点 \(y\),使得 \(D_x=D_y\cup {x}\),因此该点为 \(D_x\) 中支配集最大的点,令 \(fa_x=y\)。
- 若 \(D_x\) 大小变化,当且仅当 \(D_{fa_x}\) 大小变化或 \(fa_x\) 不在支配 \(x\)。
根据前四条结论我们可以建出一颗树状结构,每个点 \(x\) 和 \(fa_x\) 连边,这颗树叫做支配树。令 \(delp_{u,v}\) 表示删除 \(v\) 后 \(1\) 能否到 \(u\),可以得知若 \(delp_{u,v}=0\),则 \(v\) 支配 \(u\),这样就用 \(O(n^2)\) 的时限求出所有 \(D_x\),建出支配树。
那么现在剩下的任务就只剩下判断 \(fa_x\) 是否仍然支配 \(x\) 了。令 \(f_{u,v}\) 表示删去 \(fa_v\) 后 \(u\) 能否到达 \(v\),这个在反图上dfs一边可以求出。对于加的一条边 \((u,v)\),若删去 \(fa_x\) 后 \(1\) 能到 \(u\) 且删去 \(fa_x\) 后 \(v\) 能到 \(x\),则 \(D_x\) 大小会发生变化。再根据第五条结论,在支配树上bfs一遍就能求出所有受支配集变化的点。
因为题目要求的是排名的总方案数,所以考虑贪心地分配 \(b_i\)。若 \(a_i>a_{i-1}\),令 $b_i=b_{i-1}},否则令 \(b_i=b_{i-1}+a_{i-1}-a_i\),最后如果剩下多的可以全部留个 \(b_n\)。对贡献变形可得:\(\sum b_i=\sum \max(a_i-a_{i-1},0)\times(n-i+1)\)
令 \(f(S,i,j)\) 表示前 \(|S|\) 位为 \(S\) 内元素,第 \(|S|\) 位为 \(i\),已选总贡献为 \(j\) 的方案数。
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];
}
}
省选联考2021vp记的更多相关文章
- 题解 P6622 [省选联考 2020 A/B 卷] 信号传递
洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...
- [省选联考 2020 A 卷] 组合数问题
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...
- [省选联考 2021 A 卷] 矩阵游戏
很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...
- [省选联考 2021 A/B 卷] 卡牌游戏
垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...
- jloi2017(shoi2017?)六省联考酱油记
Day -n 听说了4.22.4.23的省选,而且还是六省联考. 压力山大. 尽管我只是一名高一的simple OIer,在省选到来之前,心里还是很紧张的. 毕竟自己也知道南方dalao们都是神犇,像 ...
- P7518 & 省选联考2021 宝石
这是一篇极其简单连像我这样省三参加不了省选的蒟蒻都能看懂的题解 前置知识: 倍增LCA 二分 栈 题意 PS:这是一篇完全面向初学者的题解,会非常细,大佬请无视 题目传送门 没有思路的时候, 我们往 ...
- HEOI 十二省联考退役记
Day -1 简要的说了些注意事项 一整天都在刷树套树的水题 退役的感觉近了 Day 0 早上收拾好东西去了火车站之后 火车站居然还没有开门 等了半天 我们是从衡水到德州再到秦皇岛 到了德州之后 去车 ...
- [省选联考 2020 A/B 卷] 冰火战士
一.题目 点此看题 二.解法 其实这道题也不是特别难吧 \(......\) 但树状数组上二分是我第一次见. 我们把冰人和火人都按温度排序,那么考虑一个分界线 \(x\) ,问题就是求冰数组 \(x\ ...
- 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)
题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...
- 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)
洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\) \(10^9\) 的时代了吗?落伍了落伍了/ ...
随机推荐
- 静态类型和动态类型VS强类型和弱类型
强类型语言和静态类型语言有什么区别? 静态类型的语言具有类型系统,该类型系统在实现时由实现(编译器或解释器)检查.类型检查拒绝某些程序,并且通过检查的程序通常带有一些保证.例如,编译器保证不对浮点数使 ...
- sql运算符优先级
1.() 2.* / % 3.+正 -负 + - +连接(字符串) 4.= > < >= <= <> != !> !< 5.not 6.and 7.b ...
- Go_day04
Go基础语法 指针 指针式存储另一个变量内存地址的变量 &a 取出a的内存地址 *b 若指针b存放的式a的地址 那么 *b就直接指向a的内存 可以直接操作其中的值 指针的使用 func mai ...
- 关于office 16
word是office的组件之一,Excel也是其中之一. 一用有八大组件.
- P4774 倚天屠龙传 题解
其实这道题的主体并不难,主要是细节很多 我们可以把题目分成界限分明的两部分,第一部分,屠每条龙所用的剑只和当前拥有的剑有关.于是可以单独开一个数据结构按题目维护. 另一部分找到最小攻击次数,可以化作以 ...
- React的组件化/工程化开发(脚手架)
脚手架: create-react-app 安装脚手架: $ npm i create-react-app -g 检查安装: $ npm create-react-app --version 新建项目 ...
- rocketMq和kafka对比
为什么在RocketMQ和kafka中选型 在单机同步发送的场景下,Kafka>RocketMQ,Kafka的吞吐量高达17.3w/s,RocketMQ吞吐量在11.6w/s. kafka高性能 ...
- STM32 HAL库学习 (2) USART实验
使用STM32F407 串口:PA9.PA10(利用CH340G驱动) 一. stm32f4xx_hal_uart.c 函数说明 HAL_UART_Init 函数 要使用一个外设首先要对它进行初始化, ...
- SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)
SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具) 搜到大部分打包exe的文章都是使用exe4j打包 步骤贼多,安装麻烦,打包麻烦 收费软件,公司使用会吃律师函 JDK14以上 ...
- 准确率、召回率及AUC概念分析
准确率&&召回率 信息检索.分类.识别.翻译等领域两个最基本指标是准确率(precision rate)和召回率(recall rate),准确率也叫查准率,召回率也叫查全率.这些概念 ...