$D1T1$:$n$个村庄,第$i$个村庄的人要去第$p_i$个村庄(保证$p_i$为排列),每次可以将相邻两个村庄的人位置交换直到所有人都到达目的地。再给定一个长为$n-1$的排列$a$,表示第$i$次在第$i$个和第$i+1$个村庄中间增设一个关卡,当一次交换发生时,若交换中间存在一个卡,或交换双方中至少有一方经过过一个卡,则需要支付$1$的路费。对每个$i$输出只考虑$a_{1}\sim a_i$的卡时需要支付的最少路费。$n\leqslant 3\times 10^5$。

结论:总代价=跨过某个卡的逆序对数。
证明:任意一对跨过某个卡的逆序对想要发生位置调换,必定会支付至少$1$的代价,故总代价<=跨过某个卡的逆序对数。将每两个卡之间的部分从小到大排序,那么可以构造出方案使得两个在不同块的逆序对才会发生交换且交换代价不会超过$1$,故总代价>=跨过某个卡的逆序对数。
于是问题变为每次增加一个卡并计算这个卡左右两边形成的逆序对数(即这个卡的贡献),可以倒着做然后线段树合并,也可以直接建主席树然后正着启发式合并。$O(n\log n)$或$O(n\log^2 n)$。

$D1T2$:$2n$个人在$n$张桌上打乒乓球,下一轮中,第$i(1<i<n)$张桌上的双方将分别为这一轮的第$i-1$张桌的胜者和第$i+1$张桌的负者。第$1$张桌上分别是第$1,2$张桌的负者,第$n$张桌上分别是第$n-1,n$张桌的胜者。当两人较量时,编号大的一方有$2/3$概率赢,$1/3$概率输,问第$m+1$轮$i$在第$j$张桌上打球的概率。$n\leqslant 9,m\leqslant 20$。

一个自然的想法是,$f_{i,j}$表示$i$在$j$打球的概率,但最主要的问题是概率不独立。于是需要将状态拆得相互独立,设$f_{i,j,S}$表示$i$在$j$打球,其余位置的人状态为$S$的方案数。$S$是个$n$位三进制数,$0/1/2$分别代表某张桌上两个人都比$i$弱/都比$i$强/一强一弱,转移显然,$O(3^n2^nn^2m)$。
注意到其实只需要关心当一张桌上两个人一强一弱时的结果,所以可以优化到$O(4^nnm)$。标算使用轮廓线做到了$O(3^nn^2m)$。

$D1T3$:给定数组$\{a_n\}$以及$m$个询问$(x_i,y_i)$,每次询问是否存在一个$k$使得$a_{x_i}$异或$k$在所有数异或$k$中排第$y_i$。$n\leqslant 5\times 10^4,m\leqslant 10^6,a_i\leqslant 2^{60}$。

将所有数二进制拆分后建出$Trie$,发现$k$的某一位为$1$就相当于将这一层的左右子树交换,于是这整体上就相当于一个背包,用$bitset$优化即可做到$O(\frac{n^2}{\omega})$。

$D2T1$:$n$个点的树染$m$种颜色,相邻点不能同色。$K$个限制形如第$x_i$个点不能染$y_i$色,求合法方案数。

$f_{i,j}$表示点$i$染$j$色时子树方案数,观察转移方程可以发现合并子树就相当于两个数组作点积,安个父亲就相当于整体*-1后加上某个值。这都可以用双标记(乘法和加法)线段树合并或$Splay$启发式合并来完成。没有被询问涉及到的颜色贡献必然相等于是只要开一个点就可以了。$O(n\log n)$或$O(n\log^2 n)$。

$D2T2$:给定一棵$n$个点的无边权树,在$m$为空间中找一棵同样的树,满足任意两点的曼哈顿距离等于它们在原树上的距离,最小化$m$并输出方案。$n\leqslant 100$。

将根设为$(0,...,0)$,$A_i$表示$i$与父亲的差向量,显然$|\Sigma A_{i,j}|=1$。
结论:$A_i$一定是形如$(0,...,1,...,0)$或$(0,...,-1,...,0)$的形式。若两个点是祖孙关系那么若存在$i$使得$A_{u,i}$和$A_{v,i}$均非$0$,则它们必定同号。若两点不是祖孙关系,则它们必定不同号。
问题变为用$m$条链覆盖这棵树,链的$LCA$一侧都是$1$另一侧都是$-1$,当一个点被多条链覆盖时任选一个,做一个带线头的$DP$即可。$O(n^2)$。

$D2T3$:一棵$n$个点的树任意加新边(不能有重边和自环),使这张图的线图是弦图,求合法方案数。$n\leqslant 2\times 10^5$。
线图:为每条边建一个点,若两条边有公共点则两个点之间连一条边。
弦图:不存在一个$4$元或以上的简单环使得环中任意两个点不再有边。

观察发现一个图的线图是弦图,当且仅当它不存在一个$4$元或以上的简单环。问题变为将树上的点分集合,要么一条边独立成集合,要么两条相邻的边成一个集合,求方案数。$f_{i,0/1}$表示$i$的子树分配集合,且$i$到父亲的边是否已经被分进集合的方案数。转移时要考虑有多少个点第二维取$0$。
考虑加速,先预处理出$g_{i,0/1}$表示$i$个点自由分集合,父亲边是否被分入集合的方案数。然后考虑统计出有$i$个点$f$第二维取$0$的方案数,发现就是$\prod (f_{son,0}\ x+f_{son,1})$,分治$FFT$即可。$O(n\log^2 n)$。

PKUSC2019题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. PHP全栈学习笔记33

    javascript能做什么? 语句与注解,标识符,字面量,变量命名规范 JavaScript中的数据类型,其它类型如何转为数据型,操作符 字符方法,数组方法,函数与对象,函数表达式,变量作用域,对象 ...

  2. EasyEarth三维可视化解决方案——智慧林业

    智慧林业 智能巡管监护 护林员信息查询 护林员管护范围查询 护林员报警.采集数据查看 样点.样线管理 其它功能模块 ●一键考勤打卡 ●面积测量 ●任务公告发布 ●实时电量监控 ●一键报警功能 ●北斗短 ...

  3. 菜鸟学IT之分布式文件系统

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3310 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(had ...

  4. Mybatis(上)

    Mybatis 一.MyBatis 简介 1. MyBatis作用 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手 ...

  5. net use命令详解(转)

    net use命令详解 1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连 ...

  6. [译]如何在红帽系统(RHEL)上源码安装python3?

    原文来源: https://stackoverflow.com/questions/8087184/installing-python-3-on-rhel 很容易手动安装. 1.下载对应的python ...

  7. python读取yaml文件,在unittest中使用

    python读取yaml文件使用,有两种方式: 1.使用ddt读取 2,使用方法读取ddt的内容,在使用方法中进行调用 1.使用ddt读取 @ddt.ddt class loginTestPage(u ...

  8. LeetCode_434. Number of Segments in a String

    434. Number of Segments in a String Easy Count the number of segments in a string, where a segment i ...

  9. git bush 无法使用箭头进行选择

    1 找到git bash 的安装目录,找到bash.bashrc文件, 2 在文件的尾部加上:alias vue='winpty vue.cmd', 3 重启git bash 即可 来自:https: ...

  10. [LeetCode] 348. Design Tic-Tac-Toe 设计井字棋游戏

    Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assume the fol ...