省选联考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\) 的时代了吗?落伍了落伍了/ ...
随机推荐
- 错误小记录: python取余操作
-23 % 3 >>>1 23%-3 >>>-1 -23%-3 >>>-2 在计算机语言中,同号的整数运算,所有语言都遵循尽量让商小的原则,所以 ...
- 01-什么是ElasticSearch
1.什么是搜索? 百度:我们想要查找想要的一些信息比如在百度搜索一本书,一部电影这就是最常见的搜索 但是百度!=搜索 垂直搜索(站内搜索) 互联网的搜索:电商网站,新闻网站,招聘网站,等等 IT系统的 ...
- mysql 死锁解决
查看锁记录等待时间: SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; 把超时等待时间修改为5秒: SET innodb_lock_wait_timeou ...
- 对于Python中RawString的理解(引用)
对于Python中RawString的理解 总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2 ...
- C#重点语法——特性
特性的基本理解 ************************************************************************************* 一.含义 特 ...
- cenos7配置epel源
1.首先进入/etc/yum.repos.d/目录下,新建一个repo_bak目录,用于保存系统中原来的repo文件 [root@bogon ~]# cd /etc/yum.repos.d/ [roo ...
- 内网jenkins跨版本升级
概要: 原来使用的jenkins版本为1.6,现在需要升级为最新版2.3.6 由于在内网,不能使用jenkins自带的在线升级工具 升级思路: 由于版本跨度太大,直接copy jenkins目录,启动 ...
- Android笔记--事务处理+数据库版本升级
事务处理 beginTransaction:开始事务的标志 setTransactionSuccessful:事务成功的标志 endTransaction:结束事务的标志 在上面的图片里面,首先进行事 ...
- https加密过程!!! 这才是差不多非常详细的https双方获取共用的秘钥过程!!!!!
前言 先说看了一天各种博客让我恶心的地方,恶心死了,发现每个人说的第一次发送的内容,数字证书里面包含啥,都有各种不一样!到了最后忽然想起来直接搜着报文就行了. 比如这个博客LS/SSL 协议详解 (9 ...
- 服务器资源监测脚本(网卡、MEM、CPU)
#-*- coding: utf-8 -*- #!/usr/bin/python ''' 用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ] 主选项和报告: ...