正题

题目链接:https://www.luogu.com.cn/problem/CF917D


题目大意



给出\(n\)个点的一棵树,对于每个\(k\)求有多少个\(n\)个点的树满足与给出的树恰好有\(k\)条边重合。


解题思路

矩阵树有一个统计所有树边权和的和用法,就是把变量变成一个形如\(wx+1\)的多项式,这样一次项系数的值就表示了固定选择一条边的\(w\)时其他边的方案数之和。

这题我们可以同理,对于在给出数上的边是\(x\),而其他就是\(1\)。那么最后询问\(x^k\)的系数就是答案了。

如果暴力套\(\text{NTT}\)不仅麻烦,而且跑的很慢过不了本题,考虑另一种求系数的方法。

我们假设答案是一个形如\(F(x)=\sum_{i=0}^{n-1}a_ix^i\)的\(n\)次项式,那么我们如果把\(n\)个\(x\)的值直接带入求出\(F\),然后用待定系数法的话我们就可以列出\(n\)个方程从而解出这个\(n\)项式的每一个系数。

时间复杂度\(O(n^4)\)


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【矩阵树定理,高斯消元】的更多相关文章

  1. [CF917D]Stranger Trees[矩阵树定理+解线性方程组]

    题意 给你 \(n\) 个点的无向完全图,指定一棵树 \(S\),问有多少棵生成树和这棵树的公共边数量为 \(k\in[0,n-1]\) \(n\leq 100\) 分析 考虑矩阵树定理,把对应的树边 ...

  2. [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)

    In some countries building highways takes a lot of time... Maybe that's because there are many possi ...

  3. BZOJ4031 [HEOI2015]小Z的房间 【矩阵树定理 + 高斯消元】

    题目链接 BZOJ4031 题解 第一眼:这不裸的矩阵树定理么 第二眼:这个模\(10^9\)是什么鬼嘛QAQ 想尝试递归求行列式,发现这是\(O(n!)\)的.. 想上高斯消元,却又处理不了逆元这个 ...

  4. P3317 [SDOI2014]重建 变元矩阵树定理 高斯消元

    传送门:https://www.luogu.org/problemnew/show/P3317 这道题的推导公式还是比较好理解的,但是由于这个矩阵是小数的,要注意高斯消元方法的使用: #include ...

  5. 洛谷4208 JSOI2008最小生成树计数(矩阵树定理+高斯消元)

    qwq 这个题目真的是很好的一个题啊 qwq 其实一开始想这个题,肯定是无从下手. 首先,我们会发现,对于无向图的一个最小生成树来说,只有当存在一些边与内部的某些边权值相同的时候且能等效替代的时候,才 ...

  6. Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元

    给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...

  7. 【BZOJ3534】【Luogu P3317】 [SDOI2014]重建 变元矩阵树,高斯消元

    题解看这里,主要想说一下以前没见过的变元矩阵树还有前几个题见到的几个小细节. 邻接矩阵是可以带权值的.求所有生成树边权和的时候我们有一个基尔霍夫矩阵,是度数矩阵减去邻接矩阵.而所谓变元矩阵树实际上就是 ...

  8. SP104 Highways (矩阵树,高斯消元)

    矩阵树定理裸题 //#include <iostream> #include <cstdio> #include <cstring> #include <al ...

  9. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

    [题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...

随机推荐

  1. 安装 iperf和服务器之间测速

    安装 # https://downloads.es.net/pub/iperf/iperf-3.1.3.tar.gz wget https://iperf.fr/download/source/ipe ...

  2. React性能优化总结

    本文主要对在React应用中可以采用的一些性能优化方式做一下总结整理 前言 目的 目前在工作中,大量的项目都是使用react来进行开展的,了解掌握下react的性能优化对项目的体验和可维护性都有很大的 ...

  3. Ratel:一直站在Android逆向巅峰的平头哥

    本文来源:带动行业内卷,渣总义不容辞 字越少事儿越大,请关注github(可以点击阅读原文): https://github.com/virjarRatel 平头哥(ratel)是一个Android逆 ...

  4. 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config

    本例重新创建项目,构建一个空的mavan工程. 一.Config Server 从本地读取配置文件 新建一个moudle config_server ,pom添加依赖   <dependency ...

  5. 【mysql】截取查询分析

    1. 慢查询日志 1.1 是什么 (1)MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL ...

  6. 理解java调试的工作目录 working directory

    原文链接使用idea或者eclipse进行调试的时候会有Working directory配置: 我们创建工程,IDE会自动创建一个工程目录,假设工程名称为:TestProject,那么在会创建一个目 ...

  7. ABC类IP地址

    A类IP地址一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位 必须是"0", 地址范围从1.0.0.0 到126.0.0.0.可用的A类网络有126个,每个 ...

  8. easyexcel

    导出: package com.example.demo.excel.demo0; import com.alibaba.excel.annotation.ExcelProperty; import ...

  9. ES6——类表达式

    //类表达式 const Person1 = class{ constructor(){ console.log('aa') } } //也可以跟上类名P,但是变量P在class外部是访问不到的,在c ...

  10. 《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)

    1.简介 上一篇讲解和分享了如何获取浏览器窗口的句柄,那么今天这一篇就是讲解获取后我们要做什么,就是利用获取的句柄进行浏览器窗口的切换来分别定位不同页面中的元素进行操作. 2.为什么要切换窗口? Se ...