摘要: 我们把边从小到大排序,然后依次插入一种权值的边,然后把每一个联通块合并。 然后当一次插入的边不止一条时做矩阵树定理就行了。算出有多少种生成树就行了。 剩下的交给乘法原理。 实现一不小心就会让程序变得很丑 阅读全文
posted @ 2019-03-05 21:33 Xu-daxia 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 大体思路是先求出来$f[i]$代表有至少$i$个位置相同的点对数。 然后就已经没什么好害怕的了(跟BZOJ3622一样) 然后这个$f[i$]怎么求呢? 最无脑的方法就是枚举位置,然后$hash$表记一下每种情况出现多少次然后把$\sum_{情况个数}{情况次数 (情况次数 1)}$加到$f[$枚举 阅读全文
posted @ 2019-03-05 21:27 Xu-daxia 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 因为当$A include include include include using namespace std; const int mod=1e9+7; int n,m,mx,dp[2100][2100][2],ans; int read(){ int sum=0,f=1;char ch=ge 阅读全文
posted @ 2019-03-05 21:15 Xu-daxia 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 乍一看我不会。 先不考虑加点。 先考虑没有那个除$2$。 考虑每一条边的贡献,假设某一条边把这棵树分成大小为x,y的两个部分。 那么这条边最多可以被使用$min(x,y) 2$次(因为有进有出),即贡献最大为$min(x,y) 2 $这条边的权值。 那么能不能让每一条边的被使用达到最大呢? 显然可以 阅读全文
posted @ 2019-03-05 21:07 Xu-daxia 阅读(176) 评论(0) 推荐(0) 编辑