首页 > 其他 > 详细

CF1109D Sasha and Interesting Fact from Graph Theory 组合数

时间:2020-01-27 15:29:04      阅读:60      评论:0      收藏:0      [点我收藏+]

 

题意:

给定参数 n,m,a,bn,m,a,b

你现在要构造一颗 nn 个点树,树边的权值可以赋为 [1,m][1,m]中的一个整数。

求有多少种构造树的方法,使得节点 aa 与节点 bb 在树上的最短路径恰好为 mm 。

对 10^9+7109+7 取模

题解:

组合数处理一下,还要用到下面的公式:

Cayley公式:

技术分享图片

 

 

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+1000;
const ll mod=1e9+7;

ll fac[N],inv[N];
ll fast(ll x,ll n) {
    ll ans=1;
    for(;n;n>>=1,x=x*x%mod)
        if(n&1) ans=ans*x%mod;
    return ans;
}
ll init(){
    fac[0]=fac[1]=1;
    for(int i=2;i<N;i++) fac[i]=fac[i-1]*i%mod;
    inv[N-1]=fast(fac[N-1],mod-2);
    for(int i=N-2;i>=0;i--)
        inv[i]=(inv[i+1]*(i+1))%mod;
}
ll C(ll n,ll m) {
    if(!m||m==n) return 1;
    return ((fac[n]*inv[m]%mod*inv[n-m])%mod);
}

int main() {
    init();
    ll n,m,a,b;
    cin>>n>>m>>a>>b;
    ll ans=0;
    for(ll i=0;i<=n-2&&i<=m-1;i++) {
        if(i==n-2)
            ans=(ans+C(n-2,i)*C(m-1,i)%mod*fac[i]%mod)%mod;
        else
            ans=(ans+C(n-2,i)*C(m-1,i)%mod*fac[i]%mod*(i+2)%mod*fast(n,n-i-3)%mod*fast(m,n-i-2))%mod;
    }
    cout<<ans;
}
View Code

 

CF1109D Sasha and Interesting Fact from Graph Theory 组合数

原文:https://www.cnblogs.com/bxd123/p/12236000.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!