COGS 2437 暗之链锁 II 题解
【题意】
给出一个有n个点的无向图,其中有n-1条主要边且这些主要边构成一棵树,此外还有m条其他边,求斩断原图的一条主要边和k条其他边使得图不连通的方案数mod109+7的值。
注意,就算你切断一条主要边和不足k条附加边之后就已经使图不连通,你也需要再切够k条附加边才算一种方案。
【解法】
回顾原题暗之链锁,我们仍然从连通块之间相连的边入手。
所有合法方案中不外乎k+1种情况:
1.两个连通块之间没有附加边相连,那么只要在m条附加边中任选k条即可,ans+=C(m,k);
2.两个连通块之间有1条附加边相连,那么切断这条附加边之后再从剩下的m-1条边中任选k-1条边即可,ans+=C(m-1,k-1);
3.两个连通块之间有2条附加边相连,那么切断这2条附加边之后再从剩下的m-2条边中任选k-2条边即可,ans+=C(m-2,k-2);
......
k+1.两个连通块之间有k条附加边相连,那么切断这k条附加边(之后再从剩下的0条边中选0条边)即可,ans+=1;
注意,这里的k+1方案中用到了C(0,0),在这里我们认为C(0,0)=1(因为这确实是一种可行方案)。
总的思路就很明确了,使用树链剖分或者树上差分标记边来维护每条主要边连接的两个连通块间的附加边数,最后枚举每条边,对于一条边,如果它被标记了x次,那么ans+=C(m-x,k-x)。
再次强调,认为C(0,0)=1。另外,对于被标记超过k次的主要边,没有合法方案,跳过。
另外,鉴于组合数范围很小,不需要用到拓展Lucas,直接阶乘预处理之后欧拉定理(在这里也是费马小定理)算逆元即可,当然用拓展欧几里德或者线性筛也可以。
【后记】
本题作为暗之链锁的推广版,实际上除了组合数之外并没有什么难度的提高。
作为树剖练手题以及树上差分入门题,感觉出完题之后树剖熟练了很多。然而树上差分还是不熟,需要多打。
COGS 2437 暗之链锁 II 题解的更多相关文章
- [补档][COGS 2434]暗之链锁
[COGS 2434]暗之链锁 题目 传说中的暗之连锁被人们称为Dark.<!--more-->Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无 ...
- COGS 2434 暗之链锁 题解
[题意] 给出一个有n个点的无向图,其中有n-1条主要边且这些主要边构成一棵树,此外还有m条其他边,求斩断原图的一条主要边和一条其他边使得图不连通的方案数. 注意,即使只斩断主要边就可以使得原图不连通 ...
- Leetcode 137. 只出现一次的数字 II - 题解
Leetcode 137. 只出现一次的数字 II - 题解 137. Single Number II 在线提交: https://leetcode.com/problems/single-numb ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 【COGS 2434】 暗之链锁 树上差分+LCA
差分就是把一个值拆成许多差的和如 1 2 4 6 9 那么 把这个东西拆成 1 1 2 2 3 就是了,当然也可以理解为对一个问题分解为多个子问题并对其进行操作来得到原问题的答案. 树上差分就更玄妙了 ...
- COGS 2188. [HZOI 2015] Math 题解
题目描述: 给定n个数X1-Xn,求下面式子的值(整数部分): n<=107,xi<=109且互不相同. 分析: 其实一开始看见这道题我也吓傻了,k这么大,再说我又是数论鶸渣,打死也不 ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- Blocked Billboard II题解--模拟到崩溃的模拟
前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...
- HDU 2236 无题II 题解
题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\)表示\(T\)组数据. 对于每组数 ...
随机推荐
- ubuntu下安装wine1.8和阿里旺旺
参考:http://www.linuxidc.com/Linux/2015-12/126722.htm和http://www.linuxidc.com/Linux/2016-05/131131.htm ...
- JS中两个重要的方法 call & apply 学习
正题: Function.prototype.apply(instance,args) //args 数组 Function.prototype.Call(instance,a1,a2) //a1 ...
- Object.prototype.toString.call() 区分对象类型
判断一个对象的类型: /** * 判断对象是否为数组 * @param {Object} source 待判断的对象 * @return {Boolean} true|false */ Object. ...
- yourphp 的 ThinkTemplate.class.php与ContentReplaceBehavior.class.php
ThinkTemplate.class.php :去掉版权(针对html代码) ContentReplaceBehavior.class.php:一些默认标签的路劲,如:__PUBLIC__,../P ...
- Realm简单使用小记
一.项目环境:纯OC 载入Realm: pod 'Realm' 二.为了方便调用可以写一个Realm类的分类 #import <Foundation/Foundation.h> #impo ...
- css中的px、em、rem 详解
概念介绍: 1.px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch,每英寸像素数),在扫描打印时 ...
- 微信C# SDK
微信C# SDK # 模块功能 DLL 1 基础库 Senparc.Weixin.dll 2 微信公众号 / 微信支付 / JSSDK / 摇周边 / 等等 Senparc.Weixin.MP.dll ...
- 深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
- 详解FindBugs的各项检测器 .
FindBugs是一个静态分析工具,在程序不需运行的情况下,分析class文件,将字节码与一组缺陷模式进行对比,试图寻找真正的缺陷或者潜在的性能问题.本文档主要详细说明FindBugs 2.0.3版本 ...
- Linux下C语言高手成长路线(转载)
建议学习路径: 首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了. 然后看看<C程序设计语言>K&R,这样 ...