首页 > 其他分享 >2024.2.18 近期练习

2024.2.18 近期练习

时间:2024-02-18 21:34:53浏览次数:31  
标签:2024.2 le 18 练习 即可 考虑 代价 我们 dp

P4764

值域为 \([l,r]\) 的生成森林,也就是把值 \(\ge l\) 的边拿出来生成森林,其中边 \(\le r\) 的权值和。
我们现在要求所有 \(l\),$\ge l $ 边的生成森林中边有哪些。
考虑从大往小加边,设当前加入第条边 \((u,v,w)\)。
因为这条边最小,所以这条边必选。若 \(u,v\) 不连通,那么直接连边。
若 \(u,v\) 联通,那么选 \(u\to v\) 路径上最大的边删去,这个直接 dfs 即可。
由于边的变化量是 \(O(1)\) 的,我们直接用主席树维护即可。
这种问题考虑生成树的性质,要排序。

P8352

设 \(f_{u,0/1}\) 表示求解独立集,\(u\) 选/不选的代价。
暴力的话把 \(f_{u,0},f_{u,1}\) 都作为状态,放进外层 dp 里,转移的话树上背包。
这样是 \(O(n^4)\) 的复杂度。我们没有考虑到 \(f_{u,0/1}\) 之间的联系。
更改定义,设 \(f_{u,0/1}\) 表示是否强制 \(u\) 不选的代价。
注意到 \(0\le f_{u,0}-f_{u,1}\le k\),那么我们设计 \(dp_{u,w,c}\) 表示 \(f_{u,0}-f_{u,1}=c,f_{u,1}=w\).
转移就那样。\(O(n^2)\).
这种问题是 dp of dp.

P5300

考虑先拆位。AND 和 OR 同理,变成数有多少个子矩形满足里面没有 \(1/0\).
考虑对于每一列讨论。从下往上扫,维护一个单调栈,表示以当前点为左上角,右下角的取值。
这种问题是单调栈的应用。

P5283

做前缀和,加上 01Trie 可以查询以一个位置为结尾与前面位置的异或和第 \(k\) 大。
若每个位置都计算 \(k\) 大去更新,那么达到了 \(O(nk)\).
如果我们把所有的右端点都一起去计算呢?考虑可持久化 01trie.
在上面二分即可。
这种问题是 01trie 解决异或问题的典型。

CF1918E

首先我们可以通过 \(O(n)\) 次询问找到一个位置的值。
而每次花销这么大是因为 \(x\) 的位置变动很大,如果我们把值相近的放在一起呢?
考虑分治,我们每次确定一个数 \(mid\),把大于、小于分开放,继续进行分治。
如果随机确定,那么应该也是 \(\log\) 层的,总共是 \(O(n\log n)\) 级别。
因为我们不知道 \(x\) 的值,但是可以知道相对大小,我们最后只需把他们赋给 \(1\sim n\) 即可。
这种问题需要想到按照值域分治。

CF1918F

首先把 \(k\) 设为 \(k+1\),这样最后一定要回到根节点,操作同质化。
如果不适用 \(2\) 操作,每条边经过两次,代价是 \(2(n-1)\),计算能节省多少费用。
如果我们用 \(2\) 操作,假设我们从 \(u\) 要到 \(v\),本来要花费 \(d_u-d_v\) 的代价,现在只需 \(d_v-1\) 的代价。
节省了 \(d_u-2d_v+1\) 的代价。
对于 \(v\) 考虑,\(u\) 一定是 \(v\) 子树内深度最大的几个点,且 \(v\) 每个儿子子树只能用一次。
那我们只需要选出节省代价最多的 \(k+1\) 即可。
这种问题要想到贪心,以及要转化考虑对象。

标签:2024.2,le,18,练习,即可,考虑,代价,我们,dp
From: https://www.cnblogs.com/Simon-Gao/p/18019979

相关文章

  • 闲话2.18
    晚上开始模拟费用流了......
  • (2024.2.5-2024.2.18)C语言学习小结
    这两周主要围绕《HeadfirstC》这本书展开C语言学习,同时尝试学习DES密码算法C程序。基本内容《HeadfirstC》学习的内容基本上就是进程与通信、网络、线程这块。以下是思维导图:实践练习除了书上的一些小练习之外,我也实践写了HFC的C语言实验室2的程序,一波三折,详见C代码......
  • 2024-02-18-物联网C语言(6-动态内存申请)
    6.动态内存申请6.1动态分配概述​ 在数组一章中,介绍过数组的长度是预先定义好的,在整个程序中固定不变,但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。​ 为了解决上述问题,C语言提供了-些内存管理函数,这些内存管理函数可以按需......
  • 亚马逊云ec2-user安装node-js-18.16.0
    1,下载vnm管理工具curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh|bashexportNVM_DIR="$HOME/.nvm"[-s"$NVM_DIR/nvm.sh"]&&\."$NVM_DIR/nvm.sh"#Thisloadsnvm[-s"$NVM_DIR/bash......
  • Go语言指南练习:等价二叉查找树
    题目:不同二叉树的叶节点上可以保存相同的值序列。例如,以下两个二叉树都保存了序列1,1,2,3,5,8,13。在大多数语言中,检查两个二叉树是否保存了相同序列的函数都相当复杂。我们将使用Go的并发和信道来编写一个简单的解法。本例使用了tree包,它定义了类型:typeTreestruct{Lef......
  • 海亮02/18杂题
    海亮02/18杂题个人题单T1link题意给你一个长度为\(n\)的数列,然后给你\(q\)个交换或不交换操作,你可以选择操作或者不操作,问所有情况下逆序对的总和。答案需要对\(10^9+7\)取模。\(n\leq3000\),\(q\leq3000\)。题解发现一个问题,对于操作执不执行很难描述,怎么办?......
  • SMU Winter 2024 div2 ptlks的周报Week 3(2.12-2.18)
    这周主要加强了对知识点的掌握。P10161[DTCPC2024]小方的疑惑10从题目可以得知a个连续括号贡献为a(a+1)/2,代价为2a。要求总贡献恰为k,且代价不高于n。一开始我想到了模拟,先取一个贡献低于k最大的a,剩下的再直接在外面套括号,结果wa。又想到可以分出多个a来组成k,就用递归,每次......
  • 今天练习2-回溯算法-93. 复原 IP 地址
    注意点&感悟:加油!题目链接:93.复原IP地址自己独立写的代码:classSolution:defrestoreIpAddresses(self,s:str)->List[str]:res=[]self.backtracking(s,0,[],res)returnresdefbacktracking(self,s,start_index,path,res......
  • 今天练习-回溯算法-93. 复原 IP 地址
    注意点&感悟:难吗?不难。难的是克服畏难的心里。题目链接:93.复原IP地址自己独立写的代码:fromtypingimportListclassSolution:defrestoreIpAddresses(self,s:str)->List[str]:res=[]self.backtracking(s,0,[],res)return......
  • Ubuntu18.04服务器局域网定时同步文件
    一、文件同步首先我们先了解一下rsync命令。rsync可以在本地系统之间或本地系统与远程系统之间同步、复制和备份文件和目录。rsync通过比较源与目标文件的差异来最小化数据传输,从而提高效率和速度。rsync命令有许多可选的参数,下面简单列一下常见的几个参数:-a:以归档模......