摘要: 如果要用矩阵树的话是无法限制公司个数的,发现数据范围十分小,于是考虑容斥,最后答案就等于$n-1$个公司的方案数-$n-2$个公司的方案数+$n-3$个公司的方案数$...$,然后跑矩阵树就好了。 1 #include<cstdio> 2 #include<cstring> 3 #include<i 阅读全文
posted @ 2018-01-03 21:52 Ren_Ivan 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 没想那么多,直接上了$Matrix-Tree$ 上网一搜,发现有结论,最终结果是树当且仅当有一个五边形被删了两条边且一条在中心环上,剩下的五边形各删一条边,所以是$n*4*5^{n-1}$ 好有道理,本来说T了的话打表呢,结果过了,好尴尬。 1 #include<cstdio> 2 #include 阅读全文
posted @ 2018-01-03 21:14 Ren_Ivan 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 变形的$Martix-Tree$定理 发现我们要求的是$\prod_{i \in E}{p_{i}} * \prod_{i \notin E}{(1-p_{i})}$ 然后呢? 矩阵树对重边也有效对吧。考虑带权图,发现建出来的矩阵的任何一个$n-1$阶主子式的行列式的值都是其所有生成树的边权之积的和 阅读全文
posted @ 2018-01-03 20:54 Ren_Ivan 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 先做一遍kruskal,然后发现不同的方案只可能是相同权值的不同的边干了相同的事 题目又保证了相同权值的边数很少,直接状压即可 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 阅读全文
posted @ 2018-01-03 17:01 Ren_Ivan 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 回文自动机上dp f[x]表示形成x代表的回文串所需的最小步数, 若len[x]为奇数,f[x]=len[x],因为即使有更优的,也是直接添加,没有复制操作,那样就不用从x转移了。 若len[x]为偶数,f[x]=min(f[fa[x]]+1,len[x]/2-len[fro[x]]+f[fro[x 阅读全文
posted @ 2018-01-03 16:29 Ren_Ivan 阅读(184) 评论(0) 推荐(0) 编辑
摘要: LCT维护子树size 具体维护子树信息请看我的少女 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define N 100005 7 us 阅读全文
posted @ 2018-01-03 11:47 Ren_Ivan 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 好屎的一道题啊 倒序加边kruscal,LCT维护maxn 然而我在bzoj上并卡不过去 操 放上我用尽心思卡评测的代码 1 #pragma optimize GCC ("O3") 2 #include<cstdio> 3 #include<algorithm> 4 #include<map> 5 阅读全文
posted @ 2018-01-03 11:44 Ren_Ivan 阅读(218) 评论(0) 推荐(0) 编辑