zoukankan      html  css  js  c++  java
  • CF1109D Sasha and Interesting Fact from Graph Theory 组合数

    题意:

    给定参数 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
  • 相关阅读:
    【提高测试】飘雪圣域(树状数组)
    【BZOJ2820】YY的GCD(莫比乌斯反演)
    【BZOJ2301】【HAOI2011】—Problem b(莫比乌斯反演)
    【POJ2318】—TOYS(计算几何)
    React-状态提升
    React-表单
    React-条件渲染
    React-列表 & Key
    React-HelloWorld
    MongoDB中的读写锁
  • 原文地址:https://www.cnblogs.com/bxd123/p/12236000.html
Copyright © 2011-2022 走看看