BZOJ5305 [Haoi2018]苹果树

BZOJ5305 [Haoi2018]苹果树

大家好,又见面了,我是你们的朋友全栈君。

可以发现一个\(n\)节点的树的方案数是\(n!\)

因为对于第\(i\)个点有\(i\)种选择方式 可以归纳证明 第\(i\)个点选择一个位置之后又新加入了他的左右子树 即可选择位置变为\(i+1\)

那么我们对于一个点\(i\)枚举它的子树大小\(j\) 统计要经过他和父亲的连边的点对数

它的子树的方案数即为\(j!*C_{n-i}^{j-1}\)

子树外首先要先构造出大小为\(i\)的子树 方案数\(i!\)

之后我们再在外面这棵树上添加新节点 容易发现点\(i\)的子树不能再填充 相当于少了\(2\)个填充位置 于是对于剩下的\(n-i-j+1\)个点的方案数即为\(\sum_{k=1}^{n-i-j+1}(k+i-2)\)

当然对于每一种方案它的点对数都是\(j*(n-j)\)

将以上各式相乘并化简即得\(ans=\sum_{i=1}^{n}\sum_{j=1}^{n-i+1}(j! * (n-j)! * \binom{n-i}{j-1} * i * (i-1) * j)\)

#include<bits/stdc++.h>
using namespace std;
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
#define pa pair<int,int>
#define ll long long
#define mk make_pair
#define pb push_back
#define fi first
#define se second
#define cl(x) memset(x,0,sizeof x)
#ifdef Devil_Gary
#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define bug(x)
#define debug(...)
#endif
const int INF = 0x7fffffff;
const int N=2e3+5;
/*
char *TT,*mo,but[(1<<15)+2];
#define getchar() ((TT==mo&&(mo=(TT=but)+fread(but,1,1<<15,stdin),TT==mo))?-1:*TT++)//*/
inline int read(){
    int x=0,rev=0,ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')rev=1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    return rev?-x:x;
}
int n,mod,ans,fac[N],C[N][N];
void init(){
    fac[0]=fac[1]=1;
    for(int i=2;i<=n;i++) fac[i]=(ll)fac[i-1]*i%mod;
    for(int i=0;i<=n;i++){
        C[i][0]=1;
        for(int j=1;j<=i;j++)
        C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    }
}
int calc(int a,int b){
    return (ll)a*(a-1)*b%mod;
}
int main(){
#ifdef Devil_Gary
    freopen("in.txt","r",stdin);
#endif
    n=read(),mod=read(),init();
    for(int i=2;i<=n;i++) for(int j=n-i+1;j;--j) (ans+=(ll)fac[j]*fac[n-j]%mod*C[n-i][j-1]%mod*calc(i,j)%mod)%=mod;//,bug(ans); 
    printf("%d\n",ans);
}

转载于:https://www.cnblogs.com/devil-gary/p/9067329.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107501.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入理解GC ——MinorGC\MajorGC\FullGC[通俗易懂]

    发现网上很多关于GC的文章都自相矛盾,经过长期的积累验证,本文对很多含混的知识点做了严谨的解释,欢迎有理有据的拍砖!HotSpot虚拟机将其物理上划分为两个–新生代(younggeneration)和老年代(oldgeneration)、永久代(PermanentGeneration)-涉及到的术语:Stop-the-world意味着JVM因为要执行GC而停止了…

    2022年4月15日
    48
  • 彻底卸载JDK的方式

    彻底卸载JDK的方式转自http://www.mamicode.com/info-detail-1242740.html标签:  一.备份安装好的绿色版JDKa.重新安装JDK到任意目录,假设这个目录是C:\java。b.将装好的JDK,JRE拷贝到任意一个其他目录,如D:\bak,这样做的目的主要是为了备份JDK。(建议打成zip压缩包奔备用)二.彻底卸载JDK1.第一步,首先…

    2022年6月25日
    32
  • centos安装git服务器_自己搭建github服务器

    centos安装git服务器_自己搭建github服务器环境说明CentOS7.x最小安装安装Git$yuminstallgit创建一个git用户组和用户,用来运行git服务$groupaddgit$addusergit-ggit禁止git用户登录:修改/etc/passwd文件git:x:1000:1000::/home/git:/bin/bash后面改为:git:x:1000:1000::/home/git:/bin/git…

    2022年10月4日
    0
  • linux收发邮件_linux mail命令

    linux收发邮件_linux mail命令第一步:下载邮件   yuminstallmailx安装过程中有提示,直接回车即可。第二步:进入etc/mail.rcvimetc/mail.rc  设置一些参数,此处用163邮箱,先注册163邮箱,并进入设置里设置勾选POP3/SMTP与IMAP/SMTP选项,并设置自己的授权码。解释参数:setfrom=163邮箱地址     …

    2022年8月30日
    0
  • 有效避免JS全局变量污染

    有效避免JS全局变量污染1、使用名称空间varA={};//必须定义为对象A.person={name:"zhangsan",age:18,body:{height:"180cm",weight:"70kg"}};//var定义的全局不能被删除//deleteA;//隐式全局变量被删除//deleteA.p…

    2022年5月9日
    35
  • 卷积神经网络的网络结构_典型卷积神经网络结构

    卷积神经网络的网络结构_典型卷积神经网络结构GoogLeNet原文地址:GoingDeeperwithConvolutions:https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Szegedy_Going_Deeper_With_2015_CVPR_paper.pdfGoogLeNet在2014年由ChristianSzegedy提出,它是一种全新的深度学习结构。GoogLeNet网络的主要创新点在于:提出Inception结构在多个尺寸上同时进行卷积再聚合;

    2022年8月14日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号