JZOJ5165. 【NOIP2017模拟6.25】小W的动漫
来源:互联网 发布:mysql 等于符号 编辑:程序博客网 时间:2024/05/16 17:25
Description
小W最近迷上了日本动漫,每天都有无数部动漫的更新等着他去看,所以他必须将所有的动漫排个顺序,当然,虽然有无数部动漫,但除了1号动漫,每部动漫都有且仅有一部动漫是它的前传(父亲),也就是说,所有的动漫形成一个树形结构。而动漫的顺序必须满足以下两个限制:
1、一部动漫的所有后继(子孙)都必须排在它的后面;
2、对于同一部动漫的续集(孩子),小W喜爱度高的须排在前面。
光排序小W还不爽,他想知道一共有多少种排序方案,并且输出它mod 10007的答案。
题解
题目给了两种排序的限制,我们可以通过转换,使其变为一种。
在同一个节点的儿子中,喜爱度高的应该排在前面,那我们就将喜爱度高的那一个节点作为喜爱度仅次于它的父亲。
这样之后,限制就变为了一种:父亲 要在儿子前面。
而且转换之后,树变成了一棵二叉树,
接下来就是如何求方案数。
对于每一个节点,我们记录
那么合并的时候就应该将两个儿子节点的方案数乘起来,再乘上排序的方案数。
对于两个大小为
最后的答案就是
code(c++)
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define N 1003#define mo 10007using namespace std;int f[N],s[N],jc[2*N],ny[2*N];int T,n,m,l[N],r[N],fa,x;int ksm(int x,int y){ int s=1; while(y) { if(y%2)s=(s*x)%mo; x=(x*x)%mo; y/=2; } return s;}void ins(int x,int y){ if(l[x])r[x]=y;else l[x]=y;}int C(int n,int m){ return((ny[m-n]*jc[m])%mo*ny[n])%mo;}void tree(int x){ if(l[x])tree(l[x]); if(r[x])tree(r[x]); s[x]=s[l[x]]+s[r[x]]+1; if(r[x]) { int s1=s[l[x]],s2=s[r[x]]; f[x]=((f[l[x]]*f[r[x]])%mo*C(s1,s1+s2))%mo; }else if(l[x])f[x]=f[l[x]];else f[x]=1;}int main(){ ny[1]=jc[1]=1; for(int i=2;i<2*N;i++) jc[i]=(jc[i-1]*i)%mo,ny[i]=ksm(jc[i],mo-2); scanf("%d",&T); while(T--) { memset(l,0,sizeof(l)); memset(r,0,sizeof(r)); memset(f,0,sizeof(f)); memset(s,0,sizeof(s)); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&m); fa=i; for(int j=1;j<=m;j++) scanf("%d",&x),ins(fa,x),fa=x; } tree(1); printf("%d\n",f[1]); }}
阅读全文
1 0
- JZOJ5165. 【NOIP2017模拟6.25】小W的动漫
- [JZOJ5165] 小W的动漫
- 【JZOJ5165】小W的动漫
- 【NOIP2017模拟6.25】小W的动漫
- [NOIP2017模拟]小店购物
- 【NOIP2017提高组模拟6.29】小T的钢琴
- [JZOJ5163] 【NOIP2017模拟6.25】PS的烦恼
- [NOIP2017模拟][bzoj4264]小c找朋友
- [NOIP2017模拟]杆子的排列
- 小W的数字
- [JZSC2017]【NOIP2017模拟6.25】总结
- 【jzoj4823】【小W学物理】【模拟】
- 【jzoj4840】【小W砍大树】【模拟】
- JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼
- JZOJ 5163【NOIP2017模拟6.25】PS的烦恼
- 2017.04.15【NOIP2017提高组】模拟赛B组 T1:偷懒的小X
- JZOJ 5183. 【NOIP2017提高组模拟6.29】小T的钢琴
- (前缀和排序)NOIP2017提高组模拟 Day1P1 小A的数学
- POJ 2401 Street Polygon 笔记
- LeetCode----240. Search a 2D Matrix II (M)
- 阿里云部署JavaWeb初体验
- 学习这件事
- Dive into Machine Learning[沉迷机器学习,不能自拔~]
- JZOJ5165. 【NOIP2017模拟6.25】小W的动漫
- unity fixed timestep
- Link Cut Tree
- JavaScript中WebSocket介绍与运用
- ZOJ3385
- 第二章 变量和基本类型学习笔记(第一遍阅读)
- win10+ubuntu双系统(转载)
- 安装OpenJDK1.8
- Java中的Filter过滤器