CF917D-Stranger Trees【矩阵树定理,高斯消元】
正题
题目链接:https://www.luogu.com.cn/problem/CF917D
题目大意
给出nnn个点的一棵树,对于每个kkk求有多少个nnn个点的树满足与给出的树恰好有kkk条边重合。
解题思路
矩阵树有一个统计所有树边权和的和用法,就是把变量变成一个形如wx+1wx+1wx+1的多项式,这样一次项系数的值就表示了固定选择一条边的www时其他边的方案数之和。
这题我们可以同理,对于在给出数上的边是xxx,而其他就是111。那么最后询问xkx^kxk的系数就是答案了。
如果暴力套NTT\text{NTT}NTT不仅麻烦,而且跑的很慢过不了本题,考虑另一种求系数的方法。
我们假设答案是一个形如F(x)=∑i=0n−1aixiF(x)=\sum_{i=0}^{n-1}a_ix^iF(x)=∑i=0n−1aixi的nnn次项式,那么我们如果把nnn个xxx的值直接带入求出FFF,然后用待定系数法的话我们就可以列出nnn个方程从而解出这个nnn项式的每一个系数。
时间复杂度O(n4)O(n^4)O(n4)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=110,P=1e9+7;
ll n,x[N],y[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
namespace Guass{ll a[N][N],b[N];void solve(){for(ll i=1;i<=n;i++){ll z=i;for(ll j=i;j<=n;j++)if(a[j][i]){z=j;break;}swap(a[i],a[z]);swap(b[i],b[z]);ll inv=power(a[i][i],P-2);for(ll j=i;j<=n;j++)a[i][j]=a[i][j]*inv%P;b[i]=b[i]*inv%P;for(ll j=i+1;j<=n;j++){ll rate=P-a[j][i];for(ll k=i;k<=n;k++)(a[j][k]+=rate*a[i][k]%P)%=P;(b[j]+=rate*b[i]%P)%=P;}}for(ll i=n;i>=1;i--){for(ll j=i+1;j<=n;j++)(b[i]+=P-b[j]*a[i][j]%P)%=P;}return;}
}
namespace Matrix{ll a[N][N];ll det(){ll f=1,ans=1;for(ll i=1;i<n;i++){ll z=i;for(ll j=i;j<n;j++)if(a[j][i]){if(j!=i)f=-f;z=j; break;}swap(a[i],a[z]);ll inv=power(a[i][i],P-2);ans=ans*a[i][i]%P;for(ll j=i;j<n;j++)a[i][j]=a[i][j]*inv%P;for(ll j=i+1;j<n;j++){ll rate=P-a[j][i];for(ll k=i;k<n;k++)(a[j][k]+=rate*a[i][k]%P)%=P;}}return ans*f;}void solve(ll w){for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)a[i][j]=P-1;for(ll i=1;i<=n;i++)a[i][i]=n-1;for(ll i=1;i<n;i++){a[x[i]][x[i]]+=w-1;a[y[i]][y[i]]+=w-1;a[x[i]][y[i]]=P-w;a[y[i]][x[i]]=P-w;}Guass::b[w]=det();for(ll i=1,p=1;i<=n;i++,p=p*w%P)Guass::a[w][i]=p;return;}
}
signed main(){scanf("%lld",&n);for(ll i=1;i<n;i++)scanf("%lld%lld",&x[i],&y[i]);for(ll i=1;i<=n;i++)Matrix::solve(i);Guass::solve();for(ll i=1;i<=n;i++)printf("%lld ",Guass::b[i]);return 0;
}
CF917D-Stranger Trees【矩阵树定理,高斯消元】相关推荐
- [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
题意 给你 \(n\) 个点的无向完全图,指定一棵树 \(S\),问有多少棵生成树和这棵树的公共边数量为 \(k\in[0,n-1]\) \(n\leq 100\) 分析 考虑矩阵树定理,把对应的树边 ...
- HDU多校6 - 6836 Expectation(矩阵树定理+高斯消元求行列式)
题目链接:点击查看 题目大意:给出一张由 n 个点和 m 条边组成的无向图,对于任意一个生成树,其权值为 n - 1 条边的边权进行二进制的 and 运算,现在需要在图中任意选择一个生成树,问期望权值 ...
- SP104 Highways (矩阵树,高斯消元)
矩阵树定理裸题 //#include <iostream> #include <cstdio> #include <cstring> #include <al ...
- SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
[题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...
- 矩阵与高斯消元【矩阵乘法,高斯消元求线性方程组,求行列式】 全网最详,附例题与姊妹篇 一万三千字详解
(详解)矩阵快速幂详解与常见转移矩阵的构造_秦小咩的博客-CSDN博客_矩阵快速幂转移矩阵 目录 矩阵乘法 矩阵快速幂 伪代码模板 例题一 例题2 例题三 例题四 高斯消元 整形高斯消元 浮点型高斯消 ...
- BZOJ 2466 [中山市选2009]树(高斯消元)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2466 [题目大意] 给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了, ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...
- 【学习笔记】矩阵树定理(Matrix-Tree)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...
- 洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
传送门 首先,异或的话直接讨论不好讨论,那么我们可以按位讨论,对于每一位讨论出来一个结果,然后将结果相加就好了. 然后考虑怎么讨论一位上的结果. 我们可以设出来一个dp方程:f(i)表示i到n的异或和 ...
最新文章
- 理解Kalman滤波的使用
- Dalvik/ART(ANDROID)中的多线程机制(2)
- 解决SQL单用户模式不能转为多用户模式
- ThoughtWorks技术雷达专区
- ZKEACMS for .Net Core 深度解析
- 什么事计算机事实性知识,《人工智能》复习要点
- in-place数据交换
- Weblogic12c T3 协议安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】
- julia 编程语言_Julia编程语言中的变量
- 红杉中国2021企业数字化年度指南:企业如何制胜数字化浪潮?
- Android2.2+opencv3.1配置实现
- windows电脑桌面透明便签待办分类怎么添加
- perl oracle ppm,perl – 为什么没有找到ppm:命令?
- 单反相机坏点和噪点测试软件,坏点和噪点测试程序(照片检测工具)
- Intel核显--OpenCL环境--Linux
- 使用calibre制作带目录的mobi电子书
- UEFI之PEI阶段
- Swift vs. Kotlin 漫谈之扩展篇
- c语言判断是否以某个字符串开头,以某个字符串结尾
- 红米手机使用应用沙盒动态修改imei信息
热门文章
- mysql二阶段提交有什么问题_MySQL的事务两阶段提交的技术有什么意义?
- 计算机管理无法连接虚拟磁盘服务,虚拟磁盘服务错误怎么操作【图文教程】
- 配置yml_dctc:生成docker-compose.yml配置的工具
- linux编译redis打包,linux下下载redis,并且编译
- linux强大功能,linux grep和find 的强大功能
- acwing2019. 拖拉机(最短路径)
- zynq网络时钟控制寄存器_ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断...
- 后端学习 - Redis
- Java面向对象编程(中级)
- 素数-试除法和埃式筛选法模板