首页 > 其他分享 >[COCI2015-2016#2] DRZAVA

[COCI2015-2016#2] DRZAVA

时间:2024-12-29 19:19:05浏览次数:5  
标签:连边 连通 COCI2015 mathcal DRZAVA rm 2016 复杂度 dp

思路

先把赛时想法搬一部分过来


转化题意, 对于 \(n\) 个带权 \(k\) 的点, 任意两点 \(i, j\) 之间有双向连边, 其边权为 \(w_{i, j} = d_{i, j}\) , 求一最小阈值 \(C\) , 满足对于所有 \(w \leq C\) 的边连接后, 存在一个连通块 \(G\), 使得

\[\sum_{i = 1}^{\lvert G \rvert} (a_i \cdot k_i) \equiv 0 {\pmod K} , a_i \in \{0, 1\} \]

容易发现的是, 如果你要选择一些确定的点, 使其在同一连通块下, 那么你是可以求出最小阈值 \(C\) 的, 具体的, 我们可以二分之后 \(\rm{check}\) , 这个是 \(\mathcal{O} (n \log V)\) 的, 其中 \(V\) 是值域, 当然你也可以在确定 \(C\) 的情况下检查是否让老板开心

现在问题转化成了, 如何在一个图的连通块中, 判断是否可能有一些点的点权之和为 \(K\) 的倍数, 这个用可行性 \(\rm{dp}\) 可以解决

所以我们初步可以有一个暴力, 首先实数二分 \(V\) , 在这个基础上你把图的连通块跑出来 \(\mathcal{O} (n)\), 然后对于每个连通块进行可行性 \(\rm{dp}\)

好像还没说可行性 \(\rm{dp}\) 该怎么做

令 \(dp_{i, j}\) 表示考虑到第 \(i\) 个点权, 模 \(K\) 的结果是否能达到 \(j\) , 其中 \(dp_{i, j} \in \{0, 1\}\)

显然有转移

\[\begin{align*} dp_{i, j} \gets dp_{i - 1, j} \\ dp_{i, (j + k_i)} \gets dp_{i - 1, j} \end{align*} \]

其中 \(j\) 随时取模, 甚至可以滚掉 \(i\)


总结一下, 首先实数二分当前阈值 \(\mathcal{O} (\log V)\) , 然后跑当前图的情况和可行性 \(\rm{dp}\) \(\mathcal{O} (n\omega)\) , 其中 \(\omega = 30\) , 然后直接判断

总复杂度 \(\mathcal{O} (n \log V)\) , 可以通过本题

写的时候遇到了问题, 不能用 \(\mathcal{O} (n^2)\) 的方式建图, 我们需要在不计算原图的情况下找到连通块, 好像也不影响实现


这个思路看起来复杂度正确, 但是为什么被卡了呢?

分析复杂度, 你发现 \(\rm{bfs}\) 的复杂度就已经趋势了, \(\mathcal{O} (n + n^2)\) 没得跑

考虑怎么优化, 需要一点注意力

你发现根据鸽巢原理, 如果一个连通块的大小 \(\geq k\) , 那么一定可以凑成一个 \(k\) 的倍数

那么我们每次特判一下这个, 发现 \(\rm{bfs}\) 还是很慢, 所以我们要用类似于平面最近点对的方法, 来优化找点

怎么找点优化更大, 这里给出两种方法

确定性算法

同上你知道当一个连通块的大小 \(\geq k\) 时已经有答案了, 所以最大可以有用的连边只有 \(nk\) 级别

考虑用 \(\rm{set}\) 维护 「横坐标和当前点差距不超过 \(C\)」 的点集, 按纵坐标排序
然后对于一个点的连边,找出纵坐标范围在 \([y - C, y + C]\) 之间的所有点,然后依次检验连边

考虑这样做的复杂度

对于一个点, 我们选择的范围 \(\rm{belike}\) :

pAx28Et.png

首先你发现 \(3\) 部分之内的点的个数不超过 \(k\) , \(1, 2\) 两部分各不超过 \(k\)

所以最多是 \(3k\) 个点参与枚举

容易发现时间复杂度是正确的

随机化算法

排序, 旋转, 乱搞, 反正能过

实现

框架

同赛时, 稍微修改一些东西

代码

难点在 \(\rm{set}\) 维护, 也不复杂, 为了大局考虑先不写了

总结

倍数型问题的常见解法

善于通过二分答案来转化成判断类问题

考虑答案的上界常常可以优化问题的复杂度

标签:连边,连通,COCI2015,mathcal,DRZAVA,rm,2016,复杂度,dp
From: https://www.cnblogs.com/YzaCsp/p/18639437

相关文章

  • 打卡信奥刷题(500)用C++信奥P6496[普及组/提高] [COCI2016-2017#2] Nizin
    [COCI2016-2017#2]Nizin题目描述设AAA是一个含有nnn个元素的......
  • 蓝桥杯 2016 省赛 四平方和
    题目描述四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5=0^2+0^2+1^2+2^2;7=1^2+1^2+1^2+2^2;对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0≤a≤b......
  • 洛谷 P3293 [SCOI2016] 美味
    题目描述一家餐厅有\(n\)道菜,编号\(1,2,\ldots,n\),大家对第\(i\)道菜的评价值为\(a_i\)。有\(m\)位顾客,第\(i\)位顾客的期望值为\(b_i\),而他的偏好值为\(x_i\)。因此,第\(i\)位顾客认为第\(j\)道菜的美味度为\(b_i\oplus(a_j+x_i)\),\(\oplus\)表示异或运......
  • HNOI2016 序列 题解
    HNOI2016序列题解我做离线版本时往了偏序方向想,但是发现非常麻烦。直到看到了在线版本的容斥做法,发现既好写又跑得快。首先考虑容斥,我们不妨把一个询问\([L,R]\)中最小值的位置\(pos\)求出来。子区间跨过\(pos\),贡献即\((pos-L+1)\times(R-pos+1)\timesa_{pos}\)。......
  • Shiro550漏洞(CVE-2016-4437)
    介绍ApacheShiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。Shiro框架直观、易用,同时也能提供健壮的安全性。漏洞影响版本Shiro<=1.2.4环境搭建jdk:1.8.0_372Tomcat8这里我用的是p神的环境https://github.com/phith0n/JavaThings/tree......
  • ZJOI2016 旅行者 题解
    ZJOI2016旅行者题解题目大意:给定一个\(n\timesm\)的网格图,相邻的四连通的点之间有给定边权的双向边,有\(Q\)个离线询问,问两个点之间的最短路。\(n\timesm\le2\times10^4,Q\le10^5\)。发现了吗?和上次省选组的三角剖分那道题很像,这种平面图上的最短路很有可能是分治......
  • P5459 [BJOI2016] 回转寿司
    [BJOI2016]回转寿司题目描述酷爱日料的小Z经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。不同的寿司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度。例如小Z酷爱三文鱼,他对一盘三文鱼寿司的满意度为\(10\);小Z觉得金枪......
  • P5773 [JSOI2016] 轻重路径 题解
    Description在二叉树上,不断删除叶子,你要维护其重链剖分后重儿子编号和。如果两个孩子大小相同,在一开始连向左儿子,后面保持修改前的连接。\(n\leq2\times10^5\)。Solution考虑把一个叶子\(x\)删掉会对改变哪些点的重儿子。首先改变的点\(y\)一定在\(x\)到根的链上,同时......
  • SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测
    之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了。windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016负载均衡集群的神秘面纱了。本篇主要描述个人集群搭建中遇到的坑......
  • SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】处理
    一、概述SSL/TLS协议信息泄露漏洞(CVE-2016-2183)漏洞说明:SSL全称是SecureSocketsLayer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。SSL最初的几个版本......