【题意】

给出一个有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 暗之链锁 题解的更多相关文章

  1. [补档][COGS 2434]暗之链锁

    [COGS 2434]暗之链锁 题目 传说中的暗之连锁被人们称为Dark.<!--more-->Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无 ...

  2. COGS 2437 暗之链锁 II 题解

    [题意] 给出一个有n个点的无向图,其中有n-1条主要边且这些主要边构成一棵树,此外还有m条其他边,求斩断原图的一条主要边和k条其他边使得图不连通的方案数mod109+7的值. 注意,就算你切断一条主 ...

  3. 【COGS 2434】 暗之链锁 树上差分+LCA

    差分就是把一个值拆成许多差的和如 1 2 4 6 9 那么 把这个东西拆成 1 1 2 2 3 就是了,当然也可以理解为对一个问题分解为多个子问题并对其进行操作来得到原问题的答案. 树上差分就更玄妙了 ...

  4. COGS 08-备用交换机 题解——S.B.S.

    8. 备用交换机 ★★   输入文件:gd.in   输出文件:gd.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直 ...

  5. COGS 902 乐曲主题 题解 & hash入门贺

    [题意] 给定一个长为n的序列,元素都是不超过88的正整数,求序列中主题的最大长度. 所谓主题是指在序列中出现了至少两次并且不相交的子串.特别的,主题可以变调,也就是说如果一个子串全部加上或减去一个数 ...

  6. cogs.12运输问题2题解

    乍一看貌似和运输问题1没有任何区别,但本题有一个有意思的东西叫做下限,我个人称之为非强制下限,因为本题中要求的实际是我走这条边这条边才至少走下限的流,虽然出题人没说,但从样例来看确实是这样的,而强制下 ...

  7. 【网络流24题】最长k可重区间集(费用流)

    [网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...

  8. bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统)

    bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统) cogs zoj bzoj-权限 题解 bzoj和zoj都是骗访问量的233,我没有 ...

  9. LeetCode_1114.按顺序打印(多线程)

    LeetCode_1114 LeetCode-1114.按顺序打印 我们提供了一个类: public class Foo { public void one() { print("one&q ...

随机推荐

  1. 重启nginx

    在env/nginx/sbin目录下输入:nginx,即可重启

  2. HTML5基本特性和新功能

    HTML5的基本特征 1.向前兼容性 核心理念——平滑过渡! 不支持html5的浏览器可以向前兼容,并不会影响web内容的显示! 2.跨平台运行性 从pc浏览器到手机.平板电脑,甚至是智能电视. 只要 ...

  3. Mac按键

    ⌘——Command ⌃ ——Control ⌥——Option (alt) ⇧——Shift ⇪——Caps Lock ⌫——Delete

  4. 【转】asp.net mvc 页面跳转

    1.使用传统的Response.Redirect例如string url = "/account/create";Response.Redirect(url); 1.Server. ...

  5. Java继承和多态实例

    我们知道面向对象的三大特性是封装.继承和多态.然而我们有时候总是搞不清楚这些概念.下面对这些概念进行整理, 为以后面向抽象的编程打下坚实的基础. 封装的概念还是很容易理解的.如果你会定义类,那么相信你 ...

  6. Java Lambda表达式入门

    Java Lambda表达式入门 http://blog.csdn.net/renfufei/article/details/24600507 Java 8十个lambda表达式案例 http://w ...

  7. 整理的mysql优化内容

    1,当只要一行数据时使用 LIMIT 1如果明确只取一条数据,要加上limit 1; 2,避免 SELECT *,根据需要获取字段应该养成一个需要什么就取什么的好的习惯. 3,使用 ENUM 而不是 ...

  8. UnicodeDecodeError: 'utf8' codec can't decode

    数据库存了些中文字符, 比如'处理脚本'这样的汉字, 结果导致一个python程序报错. 下面记录处理过程和相关结论. ===========================dal.py 程序片段,p ...

  9. EF-Linq将查询结果转换为List<string>

    List<int> id_list = new List<int>() { 1 };//测试数据...List<string> guid_list = (from ...

  10. corntab

    http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html