题解 CF917D 【Stranger Trees】
生成树计数问题用矩阵树定理来考虑。
矩阵树定理求得的为\(\sum\limits_T\prod\limits_{e\in T}v_e\),也就是所有生成树的边权积的和。
这题边是不带权的,应用矩阵树定理前,我们必须考虑给每条边赋上一个权值。
可以从多项式的角度来考虑解决生成树和给定树有\(k\)条边重复这一条件,将给定树的边边权赋为\(x\),其余边赋为\(1\),那么应用矩阵树定理后得到的多项式中第\(k\)次项\(x^k\)的系数即为恰好有\(k\)条边重复的方案数。
发现直接代入多项式来求行列式不太现实,那么可以先求得\(x\)在取\(1\)到\(n\)时行列式的值,然后就得到了\(n\)个方程,把原多项式的系数看作未知数,代入\(x\)得到的值来作为现在的系数,那么就可以通过高斯消元来求解了。
具体实现看代码吧。
\(code:\)
#include<bits/stdc++.h>
#define maxn 210
#define mod 1000000007
using namespace std;
typedef long long ll;
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
if(flag)x=-x;
}
ll n;
ll a[maxn][maxn],b[maxn][maxn],e[maxn][maxn];
ll inv(ll x)
{
ll y=mod-2,ans=1;
while(y)
{
if(y&1) ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans;
}
ll det()
{
ll ans=1;
for(int i=1;i<n;++i)
{
ll p=inv(b[i][i]);
for(int j=i+1;j<n;++j)
{
ll d=b[j][i]*p%mod;
for(int k=i;k<n;++k)
b[j][k]=(b[j][k]-b[i][k]*d%mod+mod)%mod;
}
ans=ans*b[i][i]%mod;
if(!b[i][i]) return 0;
}
return ans;
}
void gauss()
{
for(int i=1;i<=n;++i)
{
ll d=inv(a[i][i]);
for(int j=i;j<=n+1;++j) a[i][j]=a[i][j]*d%mod;
for(int j=i+1;j<=n;++j)
{
d=a[j][i];
for(int k=i;k<=n+1;++k)
a[j][k]=(a[j][k]-a[i][k]*d%mod+mod)%mod;
}
}
for(int i=n;i;--i)
for(int j=i-1;j;--j)
a[j][n+1]=(a[j][n+1]-a[j][i]*a[i][n+1]%mod+mod)%mod;
}
int main()
{
read(n);
for(int i=1;i<n;++i)
{
int x,y;
read(x),read(y);
e[x][y]=e[y][x]=1;
}
for(int i=1;i<=n;++i)
{
a[i][1]=1;
for(int j=2;j<=n;++j)
a[i][j]=a[i][j-1]*i%mod;
}
for(int k=1;k<=n;++k)
{
for(int i=1;i<=n;++i)
{
b[i][i]=0;
for(int j=1;j<=n;++j)
{
if(i==j) continue;
if(e[i][j]) b[i][j]=mod-k,b[i][i]+=k;
else b[i][j]=mod-1,b[i][i]++;
}
}
a[k][n+1]=det();
}
gauss();
for(int i=1;i<=n;++i) printf("%lld ",a[i][n+1]);
return 0;
}
题解 CF917D 【Stranger Trees】的更多相关文章
- CF917D Stranger Trees
CF917D Stranger Trees 题目描述 给定一个树,对于每个\(k=0,1\cdots n-1\),问有多少个生成树与给定树有\(k\)条边重合. 矩阵树定理+高斯消元 我们答案为\(f ...
- CF917D. Stranger Trees & TopCoder13369. TreeDistance(变元矩阵树定理+高斯消元)
题目链接 CF917D:https://codeforces.com/problemset/problem/917/D TopCoder13369:https://community.topcoder ...
- CF917D Stranger Trees【矩阵树定理,高斯消元】
题目链接:洛谷 题目大意:给定一个$n$个节点的树$T$,令$ans_k=\sum_{T'}[|T\cap T'|=k]$,即有$k$条边重合.输出$ans_0,ans_1,\ldots,ans_{n ...
- 题解-Codeforces917D Stranger Trees
Problem \(\mathrm{Codeforces~917D}\) 题意概要:一棵 \(n\) 个节点的无向树.问在 \(n\) 个点的完全图中,有多少生成树与原树恰有 \(k\) 条边相同,对 ...
- [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
题意 给你 \(n\) 个点的无向完全图,指定一棵树 \(S\),问有多少棵生成树和这棵树的公共边数量为 \(k\in[0,n-1]\) \(n\leq 100\) 分析 考虑矩阵树定理,把对应的树边 ...
- 【CF917D】Stranger Trees 树形DP+Prufer序列
[CF917D]Stranger Trees 题意:给你一棵n个点的树,对于k=1...n,问你有多少有标号的n个点的树,与给出的树有恰好k条边相同? $n\le 100$ 题解:我们先考虑容斥,求出 ...
- 【CF917D】Stranger Trees
题目 看题解的时候才突然发现\(zky\)讲过这道题啊,我现在怕不是一个老年人了 众所周知矩阵树求得是这个 \[\sum_{T}\prod_{e\in T}w_e\] 而我们现在的这个问题有些鬼畜了, ...
- codeforces 917D Stranger Trees
题目链接 正解:矩阵树定理+拉格朗日插值. 一下午就搞了这一道题,看鬼畜英文题解看了好久.. 首先这题出题人给了两种做法,感觉容斥+$prufer$序列+$dp$的做法细节有点多所以没看,然而这个做法 ...
- Codeforces917D. Stranger Trees
$n \leq 100$的完全图,对每个$0 \leq K \leq n-1$问生成树中与给定的一棵树有$K$条公共边的有多少个,答案$mod \ \ 1e9+7$. 对这种“在整体中求具有某些特性的 ...
随机推荐
- laravel Excel 导入
<?php namespace App\Modules\Live\Http\Controllers; use Illuminate\Http\Request; use Maatwebsite\E ...
- Redis高级特性
redis的事务(transaction) 转载:https://blog.csdn.net/fmwind/article/details/78065236 redis中的事务是一组命令的集合.事务同 ...
- python实用笔记——IO编程
打开文件 f = open('/Users/michael/test.txt', 'r') 再读取 >>> f.read() 'Hello, world!' 最后关闭 >> ...
- 恕我直言你可能真的不会java第8篇-函数式接口
一.函数式接口是什么? 所谓的函数式接口,实际上就是接口里面只能有一个抽象方法的接口.我们上一节用到的Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare. 只有一个抽象 ...
- oracle闪回,找回已提交修改的记录
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_24521431/article/details/84580166 例如删除ward_id为96 ...
- 洛谷 P6136 【【模板】普通平衡树(数据加强版)】
爱死替罪羊树了 这种暴力的数据结构爱死了.什么?!你还不知道替罪羊树?那就看看这篇博客这篇博客吧.替罪羊树就是当不平衡时,拍扁重建,然后就平衡了.想切这道题,要先把普通平衡树那道题做了(这篇博客讲了的 ...
- 洛谷 P1692 【部落卫队】
啊这道题其实暴力就行了,算是一道搜索入门题吧. 搜索变量就应该是当前到哪一位了,然后进行枚举,当前的一位加或者不加,然后知道搜完为止. 判断当前一位可不可以加的时候本来想用vector的,但是没调出来 ...
- Spring Security(二) —— Guides
摘要: 原创出处 https://www.cnkirito.moe/spring-security-2/ 「老徐」欢迎转载,保留摘要,谢谢! 2 Spring Security Guides 上一篇文 ...
- 基于ASP.NET core的MVC站点开发笔记 0x01
基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...
- Django---进阶7
目录 图书管理的图书增删改查 choices参数(数据库字段设计常见) MTV与MVC模型 多对多三种创建方式 Ajax 小例子 作业 图书管理的图书增删改查 from django.shortcut ...