【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;
其实就是当前有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;
else
if(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]);
}
}
```\]
【NOIP2017模拟6.25】小W的动漫的更多相关文章
- 2017校赛 C: 不爱学习的小W【模拟】
题目描述 “叮铃铃”上课了,同学们都及时到了教室坐到了座位上,教室里有n行m列的座位而且刚好坐满.既然是上课,那老师叫学生回答问题就是再正常不过的事了,同样地,教室里也就有爱学习和不爱学习的学生了,爱 ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- 模拟XShell的小项目
不知道大家有没有用过XShell这款工具,这款工具通过windows可以远程操作处于开机状态的linux操作系统,也就是说把你的电脑和一台服务器连入网络,你通过输入服务器所在的IP地址建立一个会话就可 ...
- 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
- hnust 不爱学习的小w
问题 C: 不爱学习的小W 时间限制: 2 Sec 内存限制: 64 MB提交: 1431 解决: 102[提交][状态][讨论版] 题目描述 “叮铃铃”上课了,同学们都及时到了教室坐到了座位上, ...
- 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱
题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...
随机推荐
- vc/vs常见报错:/****error C2106: '=' : left operand must be l-value****/
一.错误信息解析: 1.error,表示这是一条出错信息. C语言信息一般有error(出错)和warning(警告)两种. error是编译器遇到了致命错误,无法继续进行编译,必须修改. warni ...
- BeautifulSoup解析豆瓣即将上映的电影信息
工欲善其事,必先利其器,我们首先得了解beautifulsoup的使用,这其实是一个比较简单的东西 BeautifulSoup的基本使用语法规则 .find() 使用示例 soup.find('a ...
- 微服务简历V1.0
张三 电话:xxx-xxxx-xxxx 邮箱: xxxxxxx@qq.com 年龄:x岁 籍贯:江苏 求职意向:java开发工程师 期望薪资:面议 专业技能 熟练使用Ecl ...
- No repository found containing: …错误解决
由于我安装的是Eclipse ForJava Development,无JAVA EE,查找资料后发现可以自己在已有软件的基础上配置,总结如下: >>>>>点开之后,找到 ...
- linux stat 命令 显示文件和文件系统状态(查看文件属性) 查看文件inode
stat 显示文件和文件系统状态(查看文件属性) 查看文件inode详细信息 [root@MongoDB ~]# stat /etc/hosts File: ‘/etc/hosts’ Size: B ...
- 关于c++对拍的办法
众所周知,在\(oi\)学习以及考试中,对拍是一件非常重要的事. 有了对拍后,我们可以利用它发现代码上的一些非常难看出来的错误. 编写对拍程序一般有两个办法. 方案一 编写一个对拍的\(cpp\),并 ...
- 腾讯万亿级分布式消息中间件TubeMQ正式开源
TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,T ...
- Jmeter 设置默认语言为中文
1.在apache-jmeter-4.0\bin目录下,打开jmeter.properties; 2.将#language=en改为#language=cn,保存 3.重新启动jmeter.
- 不用再去找rem了,你想要的rem都在这
一.兼容性. 目前,IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem(大胆用吧,目前几乎所有手机浏览器都支持rem) 二.什么是rem. rem是相对于根元素 ...
- lamp项目上线流程简述 (ubuntu16.04 )
1 新建一个sudo用户,而不是直接用root操作 ① 新建用户可参考 https://www.cnblogs.com/bushuwei/p/10880182.html ② 赋予sudo权限: ...