题目链接

大意:不解释

思路:

首先方案数共有n!种,第1个点只有1种选择,第2个点2种选择,生成2个选择的同时消耗一个,第3个点则有3种选择,依次类推共有n!种方案,由于最后答案*n!,故输出的实际上是每种方案的总和。

由于枚举方案是不可行的,考虑枚举边,计算每一个点连向父亲的边的贡献,容易知道贡献为siz*(n-siz),siz为子树大小。所以枚举点与siz即可。再考虑组成子树的形态,与子树外的形态。设当前枚举到i号点,子树大小为siz,则子树内不考虑编号有siz!种形态,考虑编号则有C(n-i,siz-1)种编号组合,则子树内共有siz!*C(n-i,siz-1)种方案;考虑子树外:由于已有i个点,这i个点可以有i!种方案,从第i+siz-1点开始由于以i为根的子树siz已确定,故这个点不能插入到以i为根的子树内,所以只有i-1种选择,这一部分贡献为(i-1)*(i)*(i+1)*……*(n-siz-1),与前面的总和化简得i*(i-1)*(n-siz-1)!。则当前枚举的点i与siz对答案的贡献为siz*(n-siz)*i*(i-1)*(n-siz-1)!*C(n-i,siz-1)*siz!。预处理出组合和阶乘枚举点i和siz统计即可。时间复杂度O(n^2);

 #include <iostream>
#include <cstdio>
#include <memory.h>
#define r(x) x=read()
#define MAXX 2005
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
using namespace std;
typedef long long ll;
ll read()
{
char ch=;ll w=,ff=;
while(ch<''||ch>''){if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<=''){w=w*+ch-'';ch=getchar();}
return ff*w;
}
ll P,n,fac[MAXX][MAXX],jie[MAXX],ans;
int main()
{
jie[]=1ll;
r(n),r(P);
for(int i=;i<=n;++i)
for(int j=;j<=i;++j)
fac[i][j]=(j==?:(fac[i-][j-]+fac[i-][j])%P);
for(int i=;i<=;++i) jie[i]=jie[i-]*i*1ll%P;
for(int i=;i<=n;++i)
for(int sz=;sz<=n-i+;++sz)
ans=(ans+(sz*1ll*(n-sz)*1ll%P*jie[sz]%P*jie[n-sz-]%P*i*(i-)%P*fac[n-i][sz-])%P)%P;
printf("%lld",ans%P);
return ;
}

最新文章

  1. 【转】zigbee终端无法重连的问题解决
  2. java Collection.shuffle()随机打乱一个顺序数组
  3. Integer to Roman -- LeetCode 012
  4. 制作图表二、使用图片工厂设置RGB改变图标颜色
  5. SGU 275 To xor or not to xor
  6. JsRender系列demo-对null 和boolen类型数据的探讨
  7. javascript 学习随笔7
  8. sql server事物控制
  9. GDB: advanced usages
  10. 四则运算 WEB
  11. Deadlock found when trying to get lock; try restarting transaction
  12. 201621123031 《Java程序设计》第5周学习总结
  13. samba服务器配置过程
  14. synchronized(this) 与synchronized(class) 之间的区别
  15. WebGL&amp;Three.js工作原理
  16. mongodb数据库操作方法
  17. CentOS 7 rpm安装jdk
  18. LeetCode(15. 三数之和)
  19. Js 中的事件委托/事件代理
  20. 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树

热门文章

  1. Eclipse 导入逆向工程
  2. Codeforces Round #201.C-Alice and Bob
  3. 「CQOI 2014」危桥
  4. set集合 ,深浅拷贝
  5. 记一次elastic-job使用
  6. LeetCode 46. 全排列(Permutations)
  7. 非均匀B样条离散点的加密与平滑
  8. scp 传输命令
  9. 自定义PopupWindow实现常用效果
  10. css(float浮动和clear清除)