【NOIP2017模拟6.25】小W的动漫
题目
小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的动漫相关推荐
- JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼
Description 话说PS总是有着各种各样的烦恼,这天,他又在为自己失败的感情史烦恼着.这时,他心中的女神,魔法少女小圆从天而降,她对他说,如果你能帮我解决一个问题,我就让你永远没有烦恼. 问题 ...
- vasp 模拟退火_【转】vasp的分子动力学模拟 - 第一原理 - 小木虫 - 学术 科研 互动社区...
vasp做分子动力学的好处,由于vasp是近些年开发的比较成熟的软件,在做电子scf速度方面有较好的优势. 缺点:可选系综太少. 尽管如此,对于大多数有关分子动力学的任务还是可以胜任的. 主要使用的系 ...
- 【牛客 - 696C】小w的禁忌与小G的长诗(dp 或 推公式容斥)
题干: 链接:https://ac.nowcoder.com/acm/contest/696/C 来源:牛客网 自从上次小w被奶牛踹了之后,就一直对此耿耿于怀. 于是"cow"成为 ...
- 7-4 堆栈模拟队列 (25 分)
7-4 堆栈模拟队列 (25 分) 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(六)
目录 作者简介 作者名:王小王-123 人物简介 二十模拟题 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(四)
目录 作者简介 作者名:王小王-123 人物简介 二十模拟题(含解析) 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(二)
目录 作者简介 人物简介 二十模拟题(含解析) 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉,天然去雕饰& ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(五)
目录 作者简介 作者名:王小王-123 人物简介 二十二模拟题(含解析) 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种" ...
- ActionScript 3.0 学习(十一) AS3 模拟接金币小游戏
本节程序实现了模拟接金币小游戏,接到青绿色时就加分,接到深蓝色时则会扣分.程序中主要要应用的知识点有:按键检测,随机数生成,碰撞检测,运用显示对象name属性判别其颜色. package {impor ...
最新文章
- [NC19798]区间权值
- hbase shell
- mysql一张表1亿天数据_1亿条数据在PHP中实现Mysql数据库分表100张
- mysql profiling_MySQL Profiling 的使用
- matlab电机建模,Matlab系列之无刷电机matlab建模.ppt
- 【转】马拉松式学习与技术人员的成长性
- 知乎究竟走的是什么路线?克隆之路靠谱吗?
- 1050. 螺旋矩阵(25)-PAT乙级真题
- windows 安装 pip工具
- 图像质量评价Code和Dataset
- 解决Ubuntu ssh 登录慢问题
- 解决excel里面“取消隐藏”是灰色的问题
- 【新书速递】Unity AR/VR 开发必知必会
- 阿里云的端口映射问题
- 心理测试单机小软件,成人心理测评系统(单机版)
- C51实现时钟12MHz,使用定时器T1的方式1定时20mS ,做一个时分秒的电子钟。
- C#打印小票自带条形码打印
- Python计算机二级过考指南
- 剑指offer题目详细版本
- App打造自定义的统计SDK
热门文章
- 【机器视觉学习笔记】伽马变换(C++)
- Linux环境变量的设置和查看
- postfix报错postfix: fatal: parameter inet_interfaces: no local interface found for ::1
- xcode清除最近打开的文件列表
- 顺序容器STL::list用法
- STL::map默认会按照.first的字母顺序排列
- React开发(211):react中refs转发到dom组件
- React开发(207):react代码分割之context的动态
- Leetcode刷题(3)整数反转
- [html] 举例说明锚点定位有什么作用?