题目

小W最近迷上了日本动漫,每天都有无数部动漫的更新等着他去看,所以他必须将所有的动漫排个顺序,当然,虽然有无数部动漫,但除了1号动漫,每部动漫都有且仅有一部动漫是它的前传(父亲),也就是说,所有的动漫形成一个树形结构。而动漫的顺序必须满足以下两个限制:
1、一部动漫的所有后继(子孙)都必须排在它的后面;
2、对于同一部动漫的续集(孩子),小W喜爱度高的须排在前面。
光排序小W还不爽,他想知道一共有多少种排序方案,并且输出它mod 10007的答案。

分析

这个题目有两个限制:
1、先父亲后儿子;2、先大儿子后小儿子。
这个处理起来就很麻烦,
于是,我们可以转化一下模型,
对于限制2,因为大儿子一定比小儿子先遍历,那么我们可以将小儿子当做前一个比它大的儿子的儿子。
如样例:
现在,限制就只剩下“先父亲后儿子”,即求遍历一棵树,当父亲被走过才可以走儿子的方案数
显然,这是一棵二叉树。
设\(f[x]\)表示,遍历以x为根的子树的方案数。
转移:
设两个儿子分别为i,j(只有一个儿子的话,f[x]就等于儿子的f值),以i为根的子树大小为s1,j的为s2;
\[f[x]=f[i]*f[j]*C^{min(s1,s2)}_{s1+s2}\](C组合求的是插板问题)
其实就是当前有s1个点,按顺序插入s2个点中。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const long long mo=10007;
const int N=1005;
using namespace std;
long long son[N][2],size[N],f[N],jc[N*3],ny[N*3],n,m,T;
long long mi(long long x,long long y)
{long long sum=1;while(y) {if(y&1) sum=sum*x%mo;x=x*x%mo;y>>=1;}return sum;
}
long long C(long long mm,long long nn)
{if(nn>mm) swap(nn,mm);return jc[mm]*ny[nn]%mo*ny[mm-nn];
}
void dg(int x)
{size[x]=1;int j=son[x][0],k=son[x][1];if(j) dg(j);if(k) dg(k);int s1=size[j],s2=size[k];size[x]+=s1+s2;if(j && k) f[x]=f[j]%mo*f[k]%mo*C(s1+s2,min(s1,s2))%mo;elseif(j) f[x]=f[j];else f[x]=1;
}
int main()
{jc[0]=ny[0]=1;for(int i=1;i<=3000;i++){jc[i]=jc[i-1]*i%mo;ny[i]=mi(jc[i],mo-2);}scanf("%lld",&T);for(;T--;){memset(son,0,sizeof(son));memset(size,0,sizeof(size));memset(f,0,sizeof(f));f[0]=1;scanf("%lld",&n);for(int i=1;i<=n;i++){int last=i,x,k;scanf("%d",&k);for(int i=1;i<=k;i++){scanf("%d",&x);if(!son[last][0]) son[last][0]=x;else son[last][1]=x;last=x;}}dg(1);printf("%lld\n",f[1]);}
}

转载于:https://www.cnblogs.com/chen1352/p/9071421.html

【NOIP2017模拟6.25】小W的动漫相关推荐

  1. JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼

    Description 话说PS总是有着各种各样的烦恼,这天,他又在为自己失败的感情史烦恼着.这时,他心中的女神,魔法少女小圆从天而降,她对他说,如果你能帮我解决一个问题,我就让你永远没有烦恼. 问题 ...

  2. vasp 模拟退火_【转】vasp的分子动力学模拟 - 第一原理 - 小木虫 - 学术 科研 互动社区...

    vasp做分子动力学的好处,由于vasp是近些年开发的比较成熟的软件,在做电子scf速度方面有较好的优势. 缺点:可选系综太少. 尽管如此,对于大多数有关分子动力学的任务还是可以胜任的. 主要使用的系 ...

  3. 【牛客 - 696C】小w的禁忌与小G的长诗(dp 或 推公式容斥)

    题干: 链接:https://ac.nowcoder.com/acm/contest/696/C 来源:牛客网 自从上次小w被奶牛踹了之后,就一直对此耿耿于怀. 于是"cow"成为 ...

  4. 7-4 堆栈模拟队列 (25 分)

    7-4 堆栈模拟队列 (25 分) 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判 ...

  5. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(六)

    目录 作者简介 作者名:王小王-123 人物简介 二十模拟题 每文一语  本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙 ...

  6. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(四)

    目录 作者简介 作者名:王小王-123 人物简介 二十模拟题(含解析) 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉 ...

  7. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(二)

    目录 作者简介 人物简介 二十模拟题(含解析) 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉,天然去雕饰& ...

  8. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(五)

    目录 作者简介 作者名:王小王-123 人物简介 二十二模拟题(含解析) 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种" ...

  9. ActionScript 3.0 学习(十一) AS3 模拟接金币小游戏

    本节程序实现了模拟接金币小游戏,接到青绿色时就加分,接到深蓝色时则会扣分.程序中主要要应用的知识点有:按键检测,随机数生成,碰撞检测,运用显示对象name属性判别其颜色. package {impor ...

最新文章

  1. [NC19798]区间权值
  2. hbase shell
  3. mysql一张表1亿天数据_1亿条数据在PHP中实现Mysql数据库分表100张
  4. mysql profiling_MySQL Profiling 的使用
  5. matlab电机建模,Matlab系列之无刷电机matlab建模.ppt
  6. 【转】马拉松式学习与技术人员的成长性
  7. 知乎究竟走的是什么路线?克隆之路靠谱吗?
  8. 1050. 螺旋矩阵(25)-PAT乙级真题
  9. windows 安装 pip工具
  10. 图像质量评价Code和Dataset
  11. 解决Ubuntu ssh 登录慢问题
  12. 解决excel里面“取消隐藏”是灰色的问题
  13. 【新书速递】Unity AR/VR 开发必知必会
  14. 阿里云的端口映射问题
  15. 心理测试单机小软件,成人心理测评系统(单机版)
  16. C51实现时钟12MHz,使用定时器T1的方式1定时20mS ,做一个时分秒的电子钟。
  17. C#打印小票自带条形码打印
  18. Python计算机二级过考指南
  19. 剑指offer题目详细版本
  20. App打造自定义的统计SDK

热门文章

  1. 【机器视觉学习笔记】伽马变换(C++)
  2. Linux环境变量的设置和查看
  3. postfix报错postfix: fatal: parameter inet_interfaces: no local interface found for ::1
  4. xcode清除最近打开的文件列表
  5. 顺序容器STL::list用法
  6. STL::map默认会按照.first的字母顺序排列
  7. React开发(211):react中refs转发到dom组件
  8. React开发(207):react代码分割之context的动态
  9. Leetcode刷题(3)整数反转
  10. [html] 举例说明锚点定位有什么作用?