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.2.两个连通块之间有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,直接阶乘预处理之后欧拉定理(在这里也是费马小定理)算逆元即可,当然用拓展欧几里德或者线性筛也可以。

【后记】

本题作为暗之链锁的推广版,实际上除了组合数之外并没有什么难度的提高。

作为树剖练手题以及树上差分入门题,感觉出完题之后树剖熟练了很多。然而树上差分还是不熟,需要多打。

时间: 2024-11-09 10:54:25

COGS 2437 暗之链锁 II 题解的相关文章

COGS 2434 暗之链锁 题解

[题意] 给出一个有n个点的无向图,其中有n-1条主要边且这些主要边构成一棵树,此外还有m条其他边,求斩断原图的一条主要边和一条其他边使得图不连通的方案数. 注意,即使只斩断主要边就可以使得原图不连通,你仍然需要继续斩断一条其他边才能成为一种方案. [解法] 考虑到原图的一个性质:使得原图不连通的方案只有以下两种情况: 1.主要边是原图的桥 2.主要边和附加边连接的两个连通块只有这两条边相连 显然每个1产生的方案都有m种,每个2产生的方案只有一种. 考虑到原图的主要边构成一棵树并且只有主要边可能

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

题目 传说中的暗之连锁被人们称为Dark.<!--more-->Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无向图的结构,图中有N个节点和两类边,一类边被称为主要边,而另一类被称为附加边.Dark有N – 1条主要边,并且Dark的任意两个节点之间都存在一条只由主要边构成的路径.另外,Dark还有M条附加边. 你的任务是把Dark斩为不连通的两部分.一开始Dark的附加边都处于无敌状态,你只能选择一条主要边切断.一旦你切断了一条主要边,Dark就会

LeetCode: Permutations II 题解

Given a collection of numbers that might contain duplicates, return all possible unique permutations. For example,[1,1,2] have the following unique permutations:[1,1,2], [1,2,1], and [2,1,1].题解:依旧使用的是DFS的思想. 首先需要遍历输入数组,获取一共有多少种不同的数字,每个数字有多少个. 最简单的方法,

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

差分就是把一个值拆成许多差的和如 1 2 4 6 9 那么 把这个东西拆成 1 1 2 2 3 就是了,当然也可以理解为对一个问题分解为多个子问题并对其进行操作来得到原问题的答案. 树上差分就更玄妙了,它既可以把原问题拆成他到根节点的所有点,也可以拆成子树,拆成子树的话修改一个点影响的是他到根的路径上所有点,根据这个我们可以再加上LCA来解决许多问题. 这道题:I. 我们可以看出我们可以把它转化成一棵有根树,那么两部分一定是一个子树和其他 II. 那些虚边,都是砍断实边之后的藕断丝连,至于如何计

Leetcode problem-122 Best Time to Buy and Sell Stock II 题解

Leetcode Problem-122  Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, bu

暗之链锁

[题目描述] 传说中的暗之连锁被人们称为Dark.Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无向图的结构,图中有N个节点和两类边,一类边被称为主要边,而另一类被称为附加边.Dark有N – 1条主要边,并且Dark的任意两个节点之间都存在一条只由主要边构成的路径.另外,Dark还有M条附加边. 你的任务是把Dark斩为不连通的两部分.一开始Dark的附加边都处于无敌状态,你只能选择一条主要边切断.一旦你切断了一条主要边,Dark就会进入防御模式,主

COGS 2188. [HZOI 2015] Math 题解

  题目描述: 给定n个数X1-Xn,求下面式子的值(整数部分): n<=107,xi<=109且互不相同. 分析: 其实一开始看见这道题我也吓傻了,k这么大,再说我又是数论鶸渣,打死也不会= = 后来看了各路神犇的题解,又仔细想了想,大概明白了. 首先,k这么大,已经不是高精乘和高精开方所能承受的了(当然,你也可以找个超级计算机算算试试) 所以我们可以把k视为∞(INF). 极限思想,由于xi互不相同,所以每个元素在比它稍微大一点点的数面前都是微乎其微,不会影响到整数部分的. (可以粗略验证

LeetCode Linked List Cycle &amp; Linked List Cycle II题解

Linked List Cycle Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space? 题目的意思就是在利用O(1)的空间判断一个链表是否存在环.我一开始的想法就是,每访问 一个节点,就遍历这个节点前面的所有节点,然后判断是否相同,如果相同就说明有环.如果所有的节点都访问完了还是没有发现有节点相同,则说明该链表没有环.但是这个想法很

BUCT蓝桥杯热身赛II题解

A题 编码(decode) 签到题,没有可说的. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <set> 5 6 using namespace std; 7 8 int main () { 9 int mark[26]; 10 memset(mark,0,sizeof(mark)); 11 string child,goal;int N; 12 cin