题目链接:洛谷

题目大意:给定一个$n$个节点的树$T$,令$ans_k=\sum_{T'}[|T\cap T'|=k]$,即有$k$条边重合。输出$ans_0,ans_1,\ldots,ans_{n-1}$.

数据范围:$1\leq n\leq 100$


这题的思路挺巧妙的,非常不错。

我们将$T$上的边的边权作为$x$,不在$T$上的边的边权设为$1$(一个完全图),然后用矩阵树定理算出所有生成树的边权之积之和,也就是$x^k$的系数就是$ans_k$,现在我们要求这个多项式。

但是运算一个多项式的行列式复杂度会高到爆炸,所以我们考虑插值,只需要$n$个点值就可以,这里我们取$x=1,2,\ldots n$,然后用高斯消元算出这个多项式的系数就可以。(具体实现看代码)

时间复杂度$O(n^4)$。

 #include<bits/stdc++.h>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = , mod = 1e9 + ;
int n, a[N][N], b[N][N];
bool tree[N][N];
inline int kasumi(int a, int b){
int res = ;
while(b){
if(b & ) res = (LL) res * a % mod;
a = (LL) a * a % mod;
b >>= ;
}
return res;
}
inline int Gauss(){
int res = ;
for(Rint i = ;i < n;i ++){
for(Rint j = i + ;j < n;j ++)
while(a[j][i]){
int d = a[i][i] / a[j][i];
for(Rint k = i;k < n;k ++)
a[i][k] = (a[i][k] - (LL) d * a[j][k] + mod) % mod;
swap(a[i], a[j]);
res = mod - res;
}
res = (LL) res * a[i][i] % mod;
if(!a[i][i]) return ;
}
return res;
}
int main(){
scanf("%d", &n);
for(Rint i = ;i < n;i ++){
int a, b;
scanf("%d%d", &a, &b);
tree[a][b] = tree[b][a] = true;
}
for(Rint k = ;k <= n;k ++){
for(Rint i = ;i <= n;i ++){
a[i][i] = ;
for(Rint j = ;j <= n;j ++){
if(i != j){
if(tree[i][j]){
a[i][j] = mod - k;
a[i][i] = (a[i][i] + k) % mod;
} else {
a[i][j] = mod - ;
a[i][i] = (a[i][i] + ) % mod;
}
}
}
}
b[k][] = ;
for(Rint i = ;i <= n;i ++) b[k][i] = (LL) b[k][i - ] * k % mod;
b[k][n + ] = Gauss();
}
for(Rint i = ;i <= n;i ++){
int inv = kasumi(b[i][i], mod - );
for(Rint j = i + ;j <= n + ;j ++)
b[i][j] = (LL) b[i][j] * inv % mod;
for(Rint j = ;j <= n;j ++)
if(i != j)
for(Rint k = i + ;k <= n + ;k ++)
b[j][k] = (b[j][k] - (LL) b[j][i] * b[i][k] % mod + mod) % mod;
}
for(Rint i = ;i <= n;i ++) printf("%d ", b[i][n + ]);
}

CF917D

最新文章

  1. TFS下的源代码控制
  2. SESSION机制
  3. node实现http上传文件进度条 -我们到底能走多远系列(37)
  4. 错误:没有为扩展名“.html”注册的生成提供程序。
  5. poj 2182 树状数组
  6. S3C2440的定时器详解
  7. mySQL:两表更新(用一个表更新另一个表)的SQL语句
  8. tkinter中frame布局控件(九)
  9. SQL Server 第四章 存储过程(Procedure),触发器(Trigger),数据完整性(Data Integrity)
  10. mybatis-plus学习笔记(一)
  11. php: 统计在线人数
  12. k8s(3)-Pods和Nodes的概念
  13. 搭建持续集成接口测试平台(jenkins+ant+jmeter)
  14. C++类的大小计算汇总
  15. Twitter数据挖掘:如何使用Python分析大数据
  16. API(一)之Serialization
  17. python知识补足
  18. turtle库基础练习
  19. 原生JS实现全选,反选
  20. scroll事件的优化以及scrollTop的兼容性

热门文章

  1. hdu 6205 card card card 尺取法
  2. CCF 2017-09-2 公共钥匙盒
  3. jQuery.print.js
  4. 通过gpio控制一个进程开启或关闭
  5. 关于H5的一些相关基础知识
  6. 使用cakewalk将工程速度与音频速度对齐(扒带参考)
  7. django_redis
  8. 深度学习_1_神经网络_4_分布式Tensorflow
  9. C和指针--高级声明
  10. Link monitoring