「6月雅礼集训 2017 Day2」A】的更多相关文章

[题目大意] 有一棵n个点的完全二叉树,边权均为1,每个点有小鸟容量c[i] 依次来了m只小鸟,第i只小鸟初始位置在pos[i]上,问来了x只小鸟的时候,怎样安排小鸟的路线可以使得小鸟移动的边权和最小,且每个点的小鸟个数不超过小鸟容量.n,m<=3*10^5 [题解] 一眼看过去费用流 有两种方法 1. 我们对每次来小鸟都新建二分图,S->小鸟容量剩余的点,小鸟容量不够的点->T,互相连边即可. 复杂度O(n^3 + n * MinCostFlow) 2. 我们对于整棵树建一张图,每次相…
[题目大意] 求n*n的棋盘,每行每列都有2个黑格子的方案数. n<=10^7 [题解] zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点,2个已经有1个度,右边有j个点的方案数 g[i,j] g[i,j] = f[i-2,j-1]*j + g[j,i-2]*P(j,2) f[i,j] = g[i,j-1] * C(i,2) = g[j,i-1] * C(j,2) g[j,i-2] = g[i-1,j-1] * C(i-1,2) / C(j,…
[题目大意] 给出一棵树,求有多少对点(u,v)满足其路径上不存在两个点a,b满足(a,b)=1 n<=10^5 [题解] 考虑找出所有不符合的点对,共有n*ln(n)对,他们要么是祖先->儿子边,要么是不是. 考虑祖先->儿子边,那么一个点在祖先以上,一个点在儿子以下的点对全部无法访问. 考虑另外一种边,就是LCA不是两个端点的,这就比较好统计了,两个点在这两棵子树的点对无法访问. 考虑用DFS序,这样子树就是连续的一段(祖先以上是连续两段) 然后就是一个二维覆盖问题,用扫描线+线段树…
[题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. $1 \leq T \leq 10^5, 1 \leq n \leq 10^7, 1\leq k \leq 10^9$ [题解] 显然引号序列可以看做括号序列,于是我们有了一个$O(n^2)$的dp了. 设$f_{i,j}$表示到第$i$个位置,前面有$j$个左引号没有匹配,的方案数 每次,要么有…
原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 |区间交| 的乘积最大. $1\leq n,L_i,R_i\leq 10^6$ [题解] 把区间去掉包含情况,然后进行排序,变成$l_i$和$r_i$都递增的数列. 然后容易发现取得区间一定是连续的一段. 然后我们推一推决策单调性. 容易得出当$j$优于$k$的情况: $r_i * (r_j - r_…
[题目大意] 有$n$天,每天能吃饭.睡觉.什么事也不干 每天吃饭的愉悦值为$e_i$,睡觉的愉悦值为$s_i$,什么都不干愉悦值为0. 要求每连续$k$天都要有至少$E$天吃饭,$S$天睡觉. 求最大愉悦值. $k \leq n \leq 1000, 0\leq s_i, e_i \leq 10^9, 0 \leq E+S \leq k$ [题解] 首先什么都不干这个是xjb写的肯定没有用.. 然后我们考虑费用流,我钦定n天都睡觉,那么假设有一天吃饭,那么我们换成吃饭的费用就是$e_i-s_i…
[题目大意] 有$n$个位置,每个位置有一个数$x_i$,代表从$i$经过1步可以到达的点在$[\max(1, i-x_i), \min(i+x_i, n)]$中. 定义$(i,j)$的距离表示从$i$到$j$经过多少步,从$j$到$i$经过多少步,这两个取最小值. 求任意两点间最大的距离. $1\leq n \leq 10^5, 1 \leq x_i < n$ [题解] 每个点经过若干次能过到达的,显然是一个区间. 考虑倍增,$[L_{x,i}, R_{x,i}]$表示从$x$开始,经过$2^…
[题目大意] 给出一棵带权树,有两类点,一类黑点,一类白点. 求切断黑点和白点间路径的最小代价. $n \leq 10^5$ [题解] 直接最小割能过..但是树形dp明显更好写 设$f_{x,0/1/2}$表示$x$这个点的子树中,0表示没有带颜色的点连到这个子树的根$x$,1表示黑点连到$x$,2表示白点连到$x$. 直接转移即可.具体看代码,挺好推得.. # include <stdio.h> # include <string.h> # include <iostrea…
[题目大意] 给出一个$n$个数的序列$\{a_n\}$,其中有些地方的数为0,要求你把这个序列填成一个1到$n$的排列,使得: $(a_i, a_j) = 1$,当且仅当$(i, j) = 1$.多组数据. $n \leq 3\times 10^5, T\leq 10$ CodeForces:无多组数据,$n \leq 10^6$ [题解] 这题有点神奇啊.. 首先考虑序列全是0要怎么做. 考虑到如果两个数的位置含有的因数种类完全一样,那么它们是可以互换的.(这个挺显然的) 观察如果两个质数的…
[题目大意] 给出平面上$n$个点,求一条连接$n$个点的不相交的路径,使得转换的方向符合所给长度为$n-2$的字符串. $n \leq 5000$ [题解] 考虑取凸包上一点,然后如果下一个是‘R',也就是向右转,那么就连到最左的点,这样下一次无论连到哪里都是向右:如果是'L',同理. 由于每次都是一个半平面,所以不会相交. # include <stdio.h> # include <string.h> # include <iostream> # include…