首页 > 其他分享 >Solution Set -「NOIP Simu.」20221011

Solution Set -「NOIP Simu.」20221011

时间:2022-10-11 11:12:41浏览次数:81  
标签:Set Simu Unknown sum Solution DFS 背包 mathcal 复杂度

「Unknown」找

  给出平面上 \(n\) 个点, 对于每个点, 求出它到其他点的欧式距离平方和.

  \(n\le2\times10^5\).


  Tag:「水题无 tag」

  画风正常的签到题. \(d^2=(x_1-x_2)^2+(y_1-y_2)^2\), 展开完全平方, 预处理出坐标的一次和, 二次和, \(\mathcal O(n)\) 求出所有答案.

「SPOJ QTREE5」Query on a tree V

  Link.


  Tag:「水题无 tag」

  点分树嘛, 由于是求最近点对所以并不需要排除非简单路径, 每个点分中心用数据结构维护点分子树内黑点到自己的最近距离即可. 复杂度 \(\mathcal O((n+q)\log n)\).

「Unknown」朋

  给定一张左右部各 \(n\) 个点的二分图, 设 \(w=7\), 对于所有 \(k\in[0,2^w)\), 求出是否存在一个完美匹配的边权与和为 \(k\).

  \(n\le100\), 边权 \(\in[0,2^w)\), 无重边.


  Tags:「A.FWT」「A.随机化」「A.数学-线性代数」「B.Tricks」

  与和 \(=k\) 不好办, 但与和是 \(k\) 的超集 (含有 \(k\) 的所有 bit) 倒好办, 只需要在一开始就仅保留符合要求的边即可. 但想要把超集信息还原, 就不得不用 IFWT 之类的和 "数量" 有关的东西. 完美匹配计数肯定 P 不了, 怎么办呢?

  其实, 我们只是想要知道一些 "数量" 加加减减后是否为 \(0\). 那么, 给每条边一个随机权值, 直接用邻接矩阵的行列式作为这个 "数量", 就能很好的刻画所有匹配关系的 "总和", 求出答案了. 复杂度 \(\mathcal O(2^wn^3)\).

  正确率 ... 比较感性, 毕竟运算中还得取个模.

「Unknown」友

  给定一棵含有 \(n\) 个点的数, 点 \(u\) 有点权 \((a_u,b_u)\). 设 \(S\) 是一个连通块点集, 求

\[\max_S\left\{\sum_{u\in S}b_u~\Big|~\sum_{u\in S}a_u\le m\right\}. \]

  \(n\le10^3\), \(m\le10^4\), 点权非负.


  Tags:「A.DP-树上 DP」「A.树论-点分治/点分树」「B.Tricks」

  这是个经典 trick, 你思考一下本题和「HDU 6643」Ridiculous Netizens 的共同点.

  在这类问题中, 背包的大小与结点数量完全无关. 不管生成背包的点有多少, 两个背包合并始终是 \(\mathcal O(m^2)\) 的, 这不是血亏吗?

  所以, 我们不合并背包, 我们只向背包中添加单个物品. 继而引出这个 DFN 上 DP 的 trick.

  点分, 每次求解过当前点分中心的答案. 我们将点分中心看作树根 DFS, 设 \(f(u,i)\) 表示仅考虑当前被 DFS 到的树, 同时包含树根和 \(u\) 的, \(\sum a=i\) 的连通块的最大 \(\sum b\). 可见, 这个状态的意义和值会随 DFS 的进行动态变化, 所以比较抽象. 考虑转移:

  • 从 \(u\) DFS 向 \(v\) 时, \(f(v,i+a_v)\gets f(u,i)+b_v\).
  • 从 \(v\) 回溯向 \(u\) 时, \(f(u,i)\overset{\max}{\longleftarrow}f(v,i)\).

  其实不难理解对吧~ 复杂度 \(\mathcal O(nm\log n)\).

标签:Set,Simu,Unknown,sum,Solution,DFS,背包,mathcal,复杂度
From: https://www.cnblogs.com/rainybunny/p/16778545.html

相关文章