【算法】树的Prufer序列
文章平均质量分 86
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ1211】【HNOI2004】树的计数
【题目链接】点击打开链接【思路要点】双倍经验题,本题是【BZOJ1005】【HNOI2008】明明的烦恼的简化版,笔者本题的代码由原题代码重构而得。题解见【BZOJ1005】【HNOI2008】明明的烦恼。【代码】#includeusing namespace std;#define MAXL 4005#define MAX原创 2018-02-05 13:08:41 · 338 阅读 · 0 评论 -
【LOJ2983】「WC2019」数树
【题目链接】点击打开链接【思路要点】op=0op=0op=0 ,算一算两棵树的公共边数即可。时间复杂度 O(N)O(N)O(N) 或 O(NLogN)O(NLogN)O(NLogN) 。op=1op=1op=1 ,考虑枚举蓝树上的一个边集 SSS ,强制红树上同样存在这些边,计算将剩余 N−∣S∣N-|S|N−∣S∣ 个联通块连成一棵树的方案数,更新答案。上述算法中,枚举蓝...原创 2019-03-31 21:13:53 · 648 阅读 · 0 评论 -
【校内训练2019-02-20】K-Beautiful Tree
【思路要点】令题目中的 kkk 为 mmm ,考虑 m=1m=1m=1 的情况,即所有同色点不能相邻。我们可以使用容斥原理来解决该问题,即强制树上出现 iii 条连接同色点的边,将答案乘上 (−1)i(-1)^i(−1)i 计入答案。将同色的点划分为若干个集合,令集合大小为 iii ,则乘上容斥系数 (−1)i(-1)^i(−1)i 。强制集合内的点在树上为一个联通块,再计算联通块之间的...原创 2019-02-22 12:17:41 · 261 阅读 · 0 评论 -
【校内训练2019-01-08】Art
【思路要点】首先,考虑一种朴素的暴力,枚举各树边是否选取,假设选取了 xxx 条边,树将分成 n−xn-xn−x 个部分,令各部分点数为 a1,a2,a3,...,an−xa_1,a_2,a_3,...,a_{n-x}a1,a2,a3,...,an−x ,可以用矩阵树定理求解答案。由该暴力解法,我们来思考一个子问题,若不考虑暴力解法中没有选取的边是否会出现在最终的生成树上,点数为 ...原创 2019-01-08 13:46:46 · 246 阅读 · 0 评论 -
【51Nod1805】小树
【题目链接】 点击打开链接 【思路要点】 规定1,2,...,M1,2,...,M1,2,...,M号节点为叶子结点,最后将答案乘上(NM)(NM)\binom{N}{M}。 考虑树的PruferPruferPrufer序列,叶子结点的编号不会出现在序列中。 用容斥原理计算答案即可, Ans=(NM)∗∑Ni=M(−1)i−M∗(N−Mi−M)∗...原创 2018-08-25 11:36:35 · 281 阅读 · 0 评论 -
【LOJ2320】「清华集训 2017」生成树计数
【题目链接】点击打开链接【思路要点】由于场。时间复杂度\(O(DC^2+D^2+TD^2LogN)\),其中\(C=165,D=146\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXM = 65;const int MAXN = 262144;const int MAXLOG = 20;const ...原创 2018-06-24 20:43:36 · 1828 阅读 · 3 评论 -
【BZOJ4766】文艺计算姬
【题目链接】点击打开链接【思路要点】写一个运用Matrix-Tree定理在取模一个大质数下解决本题的程序,通过打表找到规律:$$Ans=N^{M-1}M^{N-1}$$由于模数可能很大,具体实现时需要将乘法替换为快速加。时间复杂度\(O(Log^{2}_{N})\)。可以用Matrix-Tree定理用\(N\)和\(M\)来表示拉普拉斯矩阵(除去一行原创 2018-02-06 10:28:38 · 346 阅读 · 0 评论 -
【BZOJ1430】小猴打架
【题目链接】点击打开链接【思路要点】显然,问题是求不同的树的形态乘以\((N-1)!\)。由Prufer序列,显然不同的树的形态有\(N^{N-2}\)种,故答案为\((N-1)!*N^{N-2}\)。时间复杂度\(O(N)\)。【代码】#includeusing namespace std;#define MAXN 5005原创 2018-02-05 13:31:33 · 414 阅读 · 0 评论 -
【BZOJ1005】【HNOI2008】明明的烦恼
【题目链接】点击打开链接【双倍经验链接】【BZOJ1211】【HNOI2004】树的计数【思路要点】考虑树的Prufer序列。树的Prufer是一个长度为\(N-2\)的序列,其中每一个元素为一个\(1\)到\(N\)的整数。每一个这样的序列对应了一棵确定的\(N\)个节点的树,并且每一棵\(N\)个节点的树对应了一个这样原创 2018-02-04 19:42:52 · 331 阅读 · 0 评论 -
【省内训练2019-06-28】Islands
【思路要点】考虑一个子问题,即本题 K=NK=NK=N 时的情况。选择 1,2,…,M1,2,\dots,M1,2,…,M 作为关键点,最后将答案乘以 (NM)\binom{N}{M}(MN) 。按照如下方式定义森林的 PruferPruferPrufer 序列:找到最大的叶子节点 xxx ,记录下与 xxx 直接相连的点的标号,然后将 xxx 删去,直到只剩下 1,2,…,M1,2,...原创 2019-06-28 20:59:28 · 469 阅读 · 0 评论