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 ...
随机推荐
- 20145212 《Java程序设计》第1周学习总结
20145212 <Java程序设计>第1周学习总结 教材学习内容总结 看了毕向东老师的视频,我对Java有了进一步的了解.相比于其他的计算机编程语言(比如C语言),Java有一大特点就是 ...
- StringBuffer类
String的内容一旦声明则不可改变,如果改变,则改变的肯定是String的引用地址. 如果一个字符串要被经常改变,则就必须使用StringBuffer类. 在String类中可以通过“+”进行字符串 ...
- TortoiseSVN的相关问题
图标覆盖问题: 创建一个保存文档的目录,创建一个工作目录,工作目录创建后,没有显示覆盖图标.解决办法如下: 找到设置,在工作目录下右键 打开界面如下: 从包含路径中设置就可以. 目录检出后把它从检出状 ...
- 深刻认识一下session
session是什么: session即会话,是一种持续性,双向的连接. session和cookie在本质上没什么区别,都是针对http协议的局限性提出的一种保持客户端和服务端会话状态的机制. se ...
- 整理一下Entity Framework的查询
整理一下Entity Framework的查询 2012-08-30 13:41:59 标签:Entity Framework 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...
- VFP笔记
1.计算圆的面积的计算器 650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/12/43/wKiom1MAsFzxm ...
- 经纬度距离计算Java实现代码
public class test { private static double rad(double d) { return d * Math.PI / 180.0; } public stati ...
- 修改ubuntu DNS的步骤/wget url报错: unable to resolve host address的解决方法
wget url 报错:unable to resolve host address ‘url’,显然是无法解析主机地址,这就能看出是DNS解析的问题.解决办法就是配置可用的dns 一般是修改成为谷歌 ...
- Linux下更新时间
方法一.使用命令 ntpdate time-a.nist.gov 方法二.本地安装ntpdate客户端 在本地安装ntpdate客户端,更新时用 ntpdate cn.pool.ntp.org 如果你 ...
- 有关Highchart的那些事。。。备份一段(稍后修改)
$(function () { $('#CurrentFinanceChart').highcharts({ title: { text: '' }, xAxis: { type: 'datetime ...