COGS 2434 暗之链锁 题解
【题意】
给出一个有n个点的无向图,其中有n-1条主要边且这些主要边构成一棵树,此外还有m条其他边,求斩断原图的一条主要边和一条其他边使得图不连通的方案数。
注意,即使只斩断主要边就可以使得原图不连通,你仍然需要继续斩断一条其他边才能成为一种方案。
【解法】
考虑到原图的一个性质:使得原图不连通的方案只有以下两种情况:
1.主要边是原图的桥
2.主要边和附加边连接的两个连通块只有这两条边相连
显然每个1产生的方案都有m种,每个2产生的方案只有一种。
考虑到原图的主要边构成一棵树并且只有主要边可能是桥,因此想到一个性质:
如果把每条附加边两端点在树上的路径进行标记,那么没有被标记过的边就是原图的桥(注意这里桥一定是主要边),只被标记过一次的边一定对应唯一的一个2。
因此考虑使用树链剖分,再加上区间修改功能,最后查询每条边被标记的次数,那么没有被标记的边就是原图的桥,ans+=m(因为这条边和任意一条附加边组合都是一种方案);只被标记了一次的边对应唯一的一个2,ans++;被标记超过1次的边显然是不能构成方案的(因为砍断它之后它两边对应的两个连通块至少有两条边相连,砍断其中的任意一条边是无法使两个连通块断开的)。
顺便一提,实现区间修改单点查询功能可以使用差分数组,这样单次区间修改O(1),最后逐个查询O(n),再加上树剖单次路径修改O(logn)次,树剖预处理O(n),总的复杂度为O(n+mlogn),比起线段树单次路径修改O(log2n),总复杂度O(nlogn+mlog2n)快了很多,并且代码也更短,常数更小,也很省内存。
【后记】
听出题人(magic_sheep)说本题有好几种解法,然而本鶸渣只想到了一种,其他的还没想出来,在此膜拜神犇。
这个解法的桥和连通块听上去很像图论有关内容,实际上这个树剖解法就是从图论上的桥和连通块发展来的,只不过利用了树的性质,采用树剖实现。因此,我觉得求桥和双连通分量的算法稍加组合和改造应该也是可以解决本题的。
感觉本题很有思想难度,但代码实现却非常容易(我的代码仅仅80+行)。多做做这种题,很有意义。
【8.16增加】
昨天和ad神犇讨论了一下,ad神犇说这个题的路径处理部分不需要树剖,直接用树上差分就行。
具体做法就是把两点那个地方的差分数组++,把LCA那里的差分数组-=2(因为要屏蔽LCA),最后采用一遍dfs或者bfs之后按照bfs逆序处理就行。
LCA可以用Tarjan事先求出,这样LCA的复杂度就是O(n),单次路径处理的复杂度也从O(logn)降到了O(1)。
学到了%%%
COGS 2434 暗之链锁 题解的更多相关文章
- [补档][COGS 2434]暗之链锁
[COGS 2434]暗之链锁 题目 传说中的暗之连锁被人们称为Dark.<!--more-->Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无 ...
- COGS 2437 暗之链锁 II 题解
[题意] 给出一个有n个点的无向图,其中有n-1条主要边且这些主要边构成一棵树,此外还有m条其他边,求斩断原图的一条主要边和k条其他边使得图不连通的方案数mod109+7的值. 注意,就算你切断一条主 ...
- 【COGS 2434】 暗之链锁 树上差分+LCA
差分就是把一个值拆成许多差的和如 1 2 4 6 9 那么 把这个东西拆成 1 1 2 2 3 就是了,当然也可以理解为对一个问题分解为多个子问题并对其进行操作来得到原问题的答案. 树上差分就更玄妙了 ...
- COGS 08-备用交换机 题解——S.B.S.
8. 备用交换机 ★★ 输入文件:gd.in 输出文件:gd.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直 ...
- COGS 902 乐曲主题 题解 & hash入门贺
[题意] 给定一个长为n的序列,元素都是不超过88的正整数,求序列中主题的最大长度. 所谓主题是指在序列中出现了至少两次并且不相交的子串.特别的,主题可以变调,也就是说如果一个子串全部加上或减去一个数 ...
- cogs.12运输问题2题解
乍一看貌似和运输问题1没有任何区别,但本题有一个有意思的东西叫做下限,我个人称之为非强制下限,因为本题中要求的实际是我走这条边这条边才至少走下限的流,虽然出题人没说,但从样例来看确实是这样的,而强制下 ...
- 【网络流24题】最长k可重区间集(费用流)
[网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...
- bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统)
bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统) cogs zoj bzoj-权限 题解 bzoj和zoj都是骗访问量的233,我没有 ...
- LeetCode_1114.按顺序打印(多线程)
LeetCode_1114 LeetCode-1114.按顺序打印 我们提供了一个类: public class Foo { public void one() { print("one&q ...
随机推荐
- Java数据库——ResultSet接口
使用SQL中的SELECT语句可以查询出数据库的全部结果,在JDBC的操作中数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 从user表中查询数据 //=== ...
- curl 工具的使用
curl命令是个功能强大的网络工具,支持通过http.ftp等方式下载文件.上传文件.还可以用来抓取网页.网络监控等方面的开发,解决开发过程中遇到的问题. 常用参数 curl命令参数很多,这里只列出我 ...
- Javascript+Dom(加减乘除计算器)
计算器介绍:只能进行加减乘除,提示用户输入数字,正则表达式限制用户只能输入数字(在用户输入时限制),如果出现除零操作答案为0: 有两种针对不同运算符的解决方法: 1. 使用eval() 函数 //函数 ...
- DB服务器中的参数优化
1.swappiness 禁止系统使用swap空间,配置/etc/sysctl.conf中的vm.swappiness=0 2.Scheduler调度 Scheduler调度,指的是磁盘的IO调度算法 ...
- 菜单each+hover
<script type="text/javascript"> $(document).ready(function(){ var src1= new Array('i ...
- Yii2 menu navbar nav小部件的使用示例
menu Menu::widget( [ [ 'label' => $menu['name'], 'url' => [$menu['route']], 'items' => [ [ ...
- CSS学习点滴
1.CSS :link 选择器 a:link { background-color:yellow;text-decoration:none } 参考:http://www.w3school.com.c ...
- Mac终端Terminal调用Sublime Text
Sublime Text 本身提供了命令行工具, 只需要在 Terminal 中输入以下内容就行了 sudo ln -s /Applications/Sublime\ Text.app/Content ...
- ubuntu系统无法访问无法磁盘最佳解决办法
出现如下错误: Error mounting /dev/sda8 at /media/fzh/System: Command-line `mount -t "ntfs" -o &q ...
- 分布式缓存之 memcache 实现分布式缓存
最近想搞点分布式,但是不知道整点什么,来点简单的吧. 今天讲下memcache的分布式缓存 首先下载memcache的服务器端 百度下可以找到 然后执行安装和开启(关闭服务器)命令(还有其他的命令 可 ...