U68464 滑稽树上滑稽果(guo) 题目描述 小小迪有 n 个约会对象,每个对象有一个约会时长 p[i],小小迪 想尽可能多的去完成他的约会(假设小小迪可以瞬移),每个对象还有 一个忍耐时间 q[i],如果小小迪没有在这个时间前去赴约并完成约 会(<=q[i]),那么她就会离开.你能帮帮他嘛? 输入输出格式 输入格式: 第一行 1 个数字 n 含义如题. 接下来 n 行,一行两个数字 p[i],q[i]含义如题 输出格式: 一行一个数字表示小小迪最多能见多少个约会对象.. 输入输出样例 输入…
题目 低智选手果然刷不动uoj 首先考虑一下构造一棵树显然是骗你玩的,按位与这个东西越做越小,挂到链的最下面显然不会劣于挂到之前的某一个点下面,所以我们只需要求一个排列使得答案最小就好了 设\(A=\max(a_i)\),发现最优答案不可能要劣于反复对一个数取\(\rm and\)的答案,我们就有了一个\(O(nA)\)的暴力,设\(dp_i\)表示当前的\(\rm and\)和为\(i\),把这个\(i\)变成\(0\)的最小代价 但是有可能最后的\(\rm and\)和也不是\(0\),于是…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ370.html 题解 首先易知答案肯定是一条链,因为挂在链的最下面肯定比挂在其他节点上赚. 问题被转化成了从一个集合中不断选数加入到当前序列尾端,使得序列的所有前缀 AND 之和最小. 我们发现,假如加入一个数后可以使序列的 AND 值变小,那么必然不会去加一个使 AND 值不变的. 假设 $v = a_1\ {\rm and} \ a_2 \ {\rm and}\ \cdots \ {\rm and}\ a_n$,先…
$n \leq 1e5$个点,每个点有个权值$a_i \leq 2e5$.现将点连成树,每个点$i$的链接代价为$a_i \ \ and \ \ i父亲的代价$,这里的$and$是二进制按位与,求最小总代价. 日常被坑... 首先肯定是要把这些点连成一条链,尽量使得代价andand就and成0了.然后呢... 方法一:贪心,从小到大排.错误! 5 56499 113007 129845 126701 56282 一组错误数据. 方法二:这个想法还是可以有的,俗话说,贪心不成就DP.看一下那些二进…
一个显然的结论是最终树的形态必然是一条链.具体证明只要考虑选定树上的某一条链,然后把其他部分全部接在它后面,这样答案一定不会变劣. 那么,一开始的想法是考虑每一位的最后出现位置,但这并不容易实现.注意到最终序列是单调递减的.我们在统计答案之前,把公共位先统计掉,即始终都是1的位.这样,剩下的位的最终结果都是0.这样,我们就避免了在统计时忽略某些数.那么,我们记dp[i]表示当前的结果为i的最小费用.我们在转移时枚举下一个数字是什么.这里无需担心数字的重复放置,因为它并不能让当前的数字发生变化.那…
题解: 首先很显然的是这是一条链(特殊数据说是链是故意让人迷茫的??) 然后 自己就开始yy 觉得每一次是加入一个使得当前值最小的数 然而这tm又是特殊数据?? 那就写一波发现是错的 考虑一下特殊数据的1e5 我们会发现每一次and一下减少至少一个1(或者从此之后保持不变) 这样我们可以枚举这一次的最高位 在剩余的数中寻找是否有这一位为0的 递归下去就可以了 时间是nloga的 再考虑一般情况 显然我们可以设f[i][s]表示前i个,状态为s 转移就是枚举ai,有一个小问题就是 ai会被重复用…
题目分析: 答案肯定是链,否则可以把枝干放到主干. 去除一直存在的位,这样0位占满时就会结束. 用$f[S]$表示0位填埋情况,每次转移是它的一个子集,我们考虑可否转移. 再用$g[S]$存储转移是否合法,用滑稽果填充$g$数组.不一定要完全满足条件,因为有其它方案更优,无影响. 代码: #include<bits/stdc++.h> using namespace std; #define RI register ; ,maxx; ; <<)-,res=; <<];…
链接:https://ac.nowcoder.com/acm/contest/992/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述   n个不同的滑稽果中,每个滑稽果可取可不取,从所有方案数中选取一种,求选取的方案中滑稽果个数不超过m的概率.(对109+7取模)输入描述:第一行一个正整数T( T <= 10^5 )随后T行每行两个整数n,m ( 0 < m <= n…
链接:https://ac.nowcoder.com/acm/contest/925/I来源:牛客网 题目描述 n个不同的滑稽果中,每个滑稽果可取可不取,从所有方案数中选取一种,求选取的方案中滑稽果个数不超过m的概率.(对109+7取模) 输入描述: 第一行一个正整数T( T <= 10^5 ) 随后T行每行两个整数n,m ( 0 < m <= n <= 10^5 ) 输出描述: T行,每行一个整数表示答案. 示例1 输入 复制 2 5 2 5 1 输出 复制 500000004…
#33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LCA(x,y)$表示$x,y$的最近公共祖先(即树中最深的既是$v$的祖先也是$u$的祖先的结点). 对于两个结点$u,v(u≠v)(u≠v)$,令$a=LCA(u,v)$,定义$f(u,v)=gcd(d(u,a),d(v,a))$. 其中$gcd(x,y)$表示$x,y$的最大公约数,特别地,$gc…
[UOJ#33][UR #2]树上GCD(长链剖分,分块) 题面 UOJ 题解 首先不求恰好,改为求\(i\)的倍数的个数,最后容斥一下就可以解决了. 那么我们考虑枚举一个\(LCA\)位置,在其两棵不同的子树中选择两个点,那么贡献就是这两段的\(gcd\). 那么发现要统计的东西类似于\(u\)的子树中,深度为\(d\)的点的个数,这个可以很容易的用长链剖分来维护,那么维护出这个数组之后就可以\(O(\log {dep})\)的对于贡献进行计算.然而这个复杂度是假的,因为你每次都需要一次\(O…
Problem Description In a galaxy far, far away, there are two integer sequence a and b of length n.b is a static permutation of 1 to n. Initially a is filled with zeroes.There are two kind of operations:1. add l r: add one for al,al+1...ar 2. query l…
2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护什么. 2.通过具体的状态推出未知状态的解法. 题意: 一棵有n个点的树,将其中k个点染为黑色,其余点为白色,求任意一对白白两点之间的距离和与任意一对黑黑两点之间的距离. 分析: dp思想是需要什么,维护什么.我们需要求距离和,我们就维护距离和. 在已经确定哪些点是黑点是,对于一条边,它对答案的贡献…
假装看懂的样子 假装会做的样子 UOJ Round #17 题解 加上一个(t-w)^c,c是和i相连的点的度数 是一个多项式的话可以归纳证明 一些具体实现: 多项式存储,保留t,y, f=ai*t^i*y^(n-i)这样 保留y和t进行计算即可 最后把y和t带入 把min拆开,对0~1积一次分,1~2积一次分 (至于枚举最大值w会因为w其他w值相同而算重,“高阶多项式”代入会趋近于0不考虑??!!?(感性理解,就是概率很低,因为在[0,1]无限个数中选择一个数必须和w一样,概率几乎没有)) 代…
题目大意:给定一棵有根树,边长均为1,对于每一个i,求树上有多少个点对,他们到lca距离的gcd是i.(n<=200,000) 做法:先容斥,求出gcd是i的倍数的点对,考虑长链剖分后从小到大合并计算答案,小的部分先把每个深度的数量变为每个深度的倍数的数量,然后若深度>k,直接到大的里面暴力,若深度<=k,我们在大的里面维护f[i][j]表示深度mod i(1<=i<=k)为j的点数,理论上k取n^0.5时达到最小复杂度O(n^1.5),实际上k比较小的时候常数较小.另外递归…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ33.html 题解 首先我们把问题转化成处理一个数组 ans ,其中 ans[i] 表示 d(u,a) 和 d(v,a) 同时为 i 的倍数的 (u,v) 个数.(最后求答案的时候只要莫比乌斯反演回来就好了.) 注意一下我的代码中对于 (u,v) 有祖先关系的是分开考虑的. 先点分治. 对于一个点分中心 x ,我们把答案分两部分考虑. 1. 在子树 x 中满足 LCA(u,v) = x 的 (u,v)…
[UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i)\)的和,所以我们尝试通过反演将\(x(i)\)表达成一系列\(b(i)\)的和的形式,那么就可以解出来了. 然后一个简单的化简:\(gcd(i,j)^c\cdot lcm(i,j)^d=i^d\cdot j^d\cdot gcd(i,j)c-d\). \[ \displaystyle b_i=\…
LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考虑一个排列真正的有效取模只有当 \(x\geq a_i\)时才行 所以x通过一个排列真正有效的数字必然是从大到小排列的. 求第一问 不难想到将模数从大到小排列 设f[i][j]表示到达第i个模数此时值为j是否可行. 这样dp下来我们只需要取出小于minn的那个可行值最大的即可. 考虑方案数 这样dp同样有效.…
这道题是有根树点分治+烧脑的容斥+神奇的分块 因为是规定1为根,还要求LCA,所以我们不能像在无根树上那样随便浪了,必须规定父亲,并作特殊讨论 因为gcd并不好求,所以我们用容斥转化一下,求x为gcd的因数的个数,这样就可以随便统计了,个人觉得代码比题解要好懂. 又因为统计完重心的所有子树,还有重心的父亲,所以在这个分治块内沿着重心的父亲一路向上爬,这时候重心的子树到重心的父亲的距离是变的,所以我们用神奇的分块大法,分类讨论,$≤\sqrt{n}$使用数组记录答案,方便以后再用到的时候统计,$>…
http://codeforces.com/problemset/problem/121/E 题意: Petya 喜欢幸运数,幸运数只包含 4 和 7 这两个数字.例如 47,744,4 都是幸运数字,但 5,16,467 不是. Petya 有一个 N 个数的数组,他想给这个数组执行 M 个操作,可以分为两种操作: add l r d 把第 l 到 第 r 个数都加上 d: count l r 统计第 l 到第 r 个数有多少个幸运数字. 喜闻乐见的数据结构题. 更加喜闻乐见的是这题能用树状数…
题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\)次询问某个数组中的第几个数的函数. \(n_a,n_b,n_c\leq 10^5\). \(Solution\) 显然的做法是先枚举这个数在哪个数组中,再在三个数组中二分.这个次数是\(log^2\)的. 我们如果每次确定一些数比第\(k\)个数小,那我们可以直接将这些数删掉. (可以假设数组是无限…
题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径与其他数字是否相交,相交就表示大小关系需要判断,(类似于二维偏序)用线段树维护区间最小值即可. 权值为1,2的线分别与权值为4的线相交,而且4在它们左边,所以需要判断它们的大小关系,发现${4>1}$,${4>2}$,所以满足条件. #include<iostream> #includ…
题目 大致是长剖+\(\rm dsu\ on\ tree\)的思想 先做一个转化,改为对于\(i\in[1,n-1]\)求出有多少个\(f(u,v)\)满足\(i|f(u,v)\),这样我们最后再做一个反演就好了 既然我们要求有多少对\(f(u,v)\)是\(i\)或\(i\)的倍数,我们需要在长剖的时候快速合并两边的信息,这个信息长得非常别致,形如到当前节点距离为\(i\)或\(i\)的倍数的节点个数 轻儿子这边还好说,我们直接暴力调和级数处理一下即可,但是这样的信息从中儿子哪里却非常不好继承…
bzoj4033,懒得复制,戳我戳我 Solution: 定义状态\(dp[i][j]\)表示\(i\)号节点为根节点的子树里面有\(j\)个黑色节点时最大的贡献值 然后我们要知道的就是子节点到根节点这条边会计算次数就是:子树中白色节点数\(*\)子树外白色节点数\(+\)子树中黑色节点数\(*\)子树外黑色节点数 \[dp[u][j+k]=max(dp[u][j+k],\] \[dp[u][j]+dp[v][k]+(1ll)*k*(m-k)*dis[v]+(1ll)*(siz[v]-k)*(n…
有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑 色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的 收益.问收益最大值是多少. Input 第一行两个整数N,K. 接下来N-1行每行三个正整数fr,to,dis,表示该树中存在一条长度为dis的边(fr,to). 输入保证所有点之间是联通的. N<=2000,0<=K<=N Output 输出一个正整数,表示收益的最大值. Sampl…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ440.html 前言 菜鸡选手到省选了才做联赛题. 题解 首先我们分析一下性质: 1. 假如一个格子是 0,那么它的右上角一定是 0 . 2. 假如一个格子的左边和上面两个格子一样,那么从这个格子到终点的任何两条路径相同. 不难发现,对于第 3 个斜列,我们发现这个斜列至少有一对相邻的相同格子. 也就是说,从第 3 行第 3 列这个格子到达终点的所有路径都相同. 设 $dp[c][i][j][k]$ 表示前 $c$ 列…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ104.html 题解 首先证明一个结论:对于一种分割方案,分割的顺序不影响最终结果. 证明:对于树 a[x] 和 a[y] ,如果 x 与 y 之间有分割,那么它们对答案的贡献就是 a[x] * a[y] ,否则无贡献. 于是问题转化成 DP: 设 dp[i][j] 表示把前 j 个数分成 i 段的最大收益,那么: 设 $$s[k] = \sum_{i=1}^{k} a[i]$$ $$dp[i][j] = \max_{…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ110.html 题解 我们发现n=2000 的子任务保证A=1! 分两种情况讨论: $n\leq 100$: 贪心地从高位到低位逐位考虑,看当前位是否可以放 0.用 $dp[i][j]$ 表示前 $i$ 个数是否可以在各段sum的or值不超过当前上限的情况下分成 $j$ 段. 时间复杂度 $O(n^3 \log V)$ . $A = 1$: 贪心地从高位到低位逐位考虑,看当前位置是否可以放0. 用 $d…
D. Memory and Scores 题目连接: http://codeforces.com/contest/712/problem/D Description Memory and his friend Lexa are competing to get higher score in one popular computer game. Memory starts with score a and Lexa starts with score b. In a single turn, b…
大概就是做点题. 先列一下要做的题目列表,从\(UOJ\)上找的. 129寿司晚宴 348州区划分 370滑稽树上滑稽果 457数树 22外星人 37主旋律 300吉夫特 196线段树 311积劳成疾 量子态的棋盘(咕咕咕) 题目交流通道(咕咕咕) 1.寿司晚宴 这个题还是不错的,之前学长讲过一次. 不过不记得了.还是被根号算法教做人了. 首先数据范围是500. 考虑这里面的质因子个数有多少个. 事实上很多,早就超过了20个. 而考虑\(\sqrt{n}\)以下的最多有多少个呢? 事实上只有\(…