2311: [CEOI2016]D2T3 Router
来源:互联网 发布:sql 恢复删除数据 编辑:程序博客网 时间:2024/06/03 19:07
做法指导自今年国家队队长CGH
本文由于我写的比较简略,所以一下参数系数什么加减1的操作我就先省略了
算法1
不妨考虑暴力建边。。
那么就是
期望得分9分
算法2
我们考虑建立中转站
然后我们先考虑建立
然后每根号个点就连向一个中转站,然后每个中转站连向全部
这样无论代价还是边数都是
期望得分22分
算法3
我们考虑上一个算法,显然是是不够优秀的
我们发现,我们只是同一了第一排点的连线,但是第二排还是的连发还是十分暴力
于是我们不妨考虑对第二排点如法炮制,也弄一个中转站
于是我们就连两行K点,然后
同样的,我们的起点和终点都是
然后这样的话,我们不难发现,当k是n的三分之二次方的时候最优 其实我也不知道为什么。。
然后这个期望得分48
算法4
我们发现,2排点似乎也不怎么够用啊
于是我们考虑弄出多排点
那么这种暴力连边的方法就要改一改了
我们可以对一层的点拆多n个,然后类似上图的连边,右边也是一样连,我这里就不写了
然后你就可以转化为两个子问题:就是让左边的n/2个都能对应到下面的n/2个终点
然后你就可以递归地分治了
我们来分析一波复杂度:
分治是只有log层的,然后每一层会多出2*n的边
于是T(n)=T(n/2)*2+2n
然后大概是是
然后一个点的代价
如果它在第i层,那么就会有2^i个起点可以连接到它,但是却只有n/2^i个终点可以连接到它了,于是代价最多就是2n的
这个的话虽然代价很小,但是边数很多
算法5
也就是最终的算法了
考虑到算法4的代价特别小,边数特别多
于是我们可以使用类似于算法1或者2的方法优化一下
根据乱搞,我们得出当我们对起点和终点每4个点合并一下的时候是最优的
复杂度分析我就不写了。。
大家大概算一下就好了,是可以过的。。
- 2311: [CEOI2016]D2T3 Router
- [Ceoi2016]router
- 4937: [Ceoi2016]popeala
- bzoj 4936: [Ceoi2016]match
- bzoj 4936: [Ceoi2016]match
- BZOJ 4934: [Ceoi2016]kangaroo
- BZOJ 4936: [Ceoi2016]match
- BZOJ 4937: [Ceoi2016]popeala
- router
- Router
- router
- NOIP2015 D2T3运输计划
- D2T3 运输计划
- NOIP2017 D2T3 列队
- 【NOIP2014】D2T3 解方程 equation
- 【转载】NOIP2015 TG D2T3 transport
- [sdoi2017][bzoj4821] D2T3 相关分析
- NOIP2017提高组D2T3[列队]
- 一起Talk Android吧(第四十六回:Android中的Fragment十一)
- 数据结构之 栈stack 模板类(链表表示)
- 进程地址空间分布和可执行文件分布
- 大型网站的灵魂——性能
- UDP与TCP穿洞技术学习笔记
- 2311: [CEOI2016]D2T3 Router
- 读书笔记2 MYSQL必知必会
- ssh原理与运用
- Lintcode-动态规划-最长上升连续子序列
- Servlet生命周期
- 51nod 1592 数列积 莫队算法+树状数组
- springboot入门
- SVN与CVS
- strcpy库函数的实现。。