• 父子关系


    题目链接:https://www.luogu.org/problemnew/show/P4981

    首先,这道题目与小猴打架这道题目很相似(小猴打架题目链接

    小猴打架求的是:n个有序点的无根树个数

    而这道题目所求的是:n个无序点的有根树个数

    这里引入几个公式:

    1、n个无序点的有根树个数为nn-1

    2、n个无序点的无根树个数为nn-2

    3、n个有序点的有根树个数为nn-1(n-1)!

    4、n个有序点的无根树个数为nn-2(n-1)!

    有了这些公式,我们只要对题目要求我们计算的东西进行分析即可

    比如这道父子题目,表面上是求所有可以构成父子关系的情况总数,实则求n个无序点的有根树个数

    所以对于这种表示有一定的联通块意味的题目,求方案总数,对题目和样例进行分析,讨论出使用上述哪个公式即可。

    P.S.这道题目求nn-1,考虑到n的范围为109,这里使用快速幂求解

    上代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 const int MOD=1e9+9;
     6 typedef long long ll;
     7 ll quickpow(ll x,ll n)
     8 {
     9     ll res=1;
    10     while(n>0)
    11     {
    12         if(n%2==1)
    13         res=res*x%MOD;//这里注意:不可以打成res*=,否则答案错误(下同)
    14         x=x*x%MOD;
    15         n>>=1;
    16     }
    17     return res;    
    18 }
    19 int main()
    20 {
    21     ll t,n;
    22     cin>>t;
    23     while(t--)
    24     {
    25         cin>>n;
    26         cout<<quickpow(n,n-1)%MOD<<endl;
    27     }
    28     return 0;
    29 }

    总结:对于此类求特定关系的方案数的题目,考虑以上4个公式的情况,并合理应用

  • 相关阅读:
    lua module
    lua require
    lua io
    lua table2
    lua table1
    【leetcode】魔术排列
    【leetcode】速算机器人
    【leetcode】黑白方格画
    【leetcode】根据数字二进制下 1 的数目排序
    【leetcode】插入区间
  • 原文地址:https://www.cnblogs.com/cptbtptpbcptbtptp/p/11143944.html
Copyright © 2020-2023  润新知