Description

【问题背景】
  教主LHX作为知名人物,时刻会有恐怖分子威胁他的生命。于是教主雇佣了一些保镖来保障他的人生安全。

【题目描述】
  教主一共雇佣了N个保镖,编号为1~N。每个保镖虽然身手敏捷武功高强,但是他在其余N-1个保镖里,都会有一个“上司”,他会对他的上司言听计从。但一号保镖例外,他武功盖世,不惧怕其余任何保镖,所以他没有上司。
  教主LHX会对这N个保镖进行定期视察。每次视察的时候,首先会让所有保镖排队。
  对于每个保镖,在他心目中会对他的所有下属的武功实力排个队。
  现在教主要求排出来的队伍满足:①互为上司-下属的两个保镖,上司在前,下属在后 ②对于一个保镖的所有下属,武功实力较强的在前,较弱的在后。
  教主想知道,总的排队方法数除以10007的余数是多少。

Input

输入的第一行为一个正整数T,表示了数据组数。
  对于每组数据:
  第一行为一个正整数N。
  接下来N行,每行描述一个保镖。
  第i+1行,会有一个整数K,代表第i个保镖的下属个数,接下来K个数,代表第i个保镖的下属按照武功实力从高到低的编号。

Output

输出包括C行,每行对于每组数据输出方案数mod 10007后的结果。

Sample Input

2
5
2 2 3
2 4 5
0
0
0
7
2 2 3
2 4 5
2 6 7
0
0
0
0

Sample Output

3
10

Hint

【样例说明】
  对于第1组数据,有以下3种排列是合法的:
  1 2 4 3 5
  1 2 3 4 5
  1 2 4 5 3
  同时满足了1在2与3之前且2在3之前,2在4与5之前且4在5之前

【数据规模】
  对于20%的数据,有N ≤ 9;
  对于40%的数据,有对于所有K,有K ≤ 2;
  对于60%的数据,有N ≤ 100;
  对于100%的数据,有T ≤ 10,N ≤ 1000,K ≤ N。

题解

  • 首先要明确的是,属于不同子树的点可以混在一起,只要同一子树的有序就可以了。

  • 如果一个结点有两个儿子l,r,并且l排在r的前面,那么总的方法数就是f[l]*f[r]*C(size[l]+size[r]-1,size[l]-1)

  • 其含义是:容易想到,根据乘法原理,总共会有f[l]*f[r]种情况,对于每种情况,都可以有C(size[l]+size[r]-1,size[l]-1)种合并方法

  • 子树总共有size[l]+size[r]个结点(不算根结点),因为l必排最前面,所以剩下的位置就是size[l]+size[r]-1个,其中属于l的总共就有size[l]-1个,这个就直接用组合数就算出来了

  • 然后再一个个往后合并就好了
  • 组合数可以直接用杨辉三角推出来,如果现算的话时间复杂度就比较高。尤其是RQNOJ的测评机都很蜗牛。

代码

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,c[2500][2500],map[2500][2500],s[2500],f[2500],t;
 6 void dp(int x)
 7 {
 8     int t;
 9     f[x]=1; s[x]=0;
10     for (int i=map[x][0];i>=1;i--)
11     {
12            t=map[x][i];
13            dp(t);
14            f[x]=(((f[x]*f[t])%10007)*(c[s[t]+s[x]-1][s[t]-1]))%10007;
15            s[x]+=s[t];
16     }
17     s[x]=s[x]+1;
18 }
19 int main()
20 {
21     c[0][0]=1;
22     for (int i=1;i<2500;++i)
23     {
24            c[i][0]=c[i][i]=1;
25            for(int j=1;j<i;++j) c[i][j]=(c[i-1][j-1]+c[i-1][j])%10007;
26     }
27     scanf("%d",&t);
28     for (int i=1;i<=t;i++)
29     {
30            scanf("%d",&n);
31         for (int i=1;i<=n;++i)
32         {
33                scanf("%d",&map[i][0]);
34                for(int j=1;j<=map[i][0];j++) scanf("%d",&map[i][j]);
35         }
36            dp(1);
37            printf("%d\n",f[1]);
38     }
39     return 0;
40 }

转载于:https://www.cnblogs.com/Comfortable/p/8427405.html

[树形dp][组合数] JZOJ P1794 保镖排队相关推荐

  1. [CQOI2017] 老C的键盘(树形dp + 组合数)

    problem luogu-P3757 solution observation:\text{observation}:observation: hi/2−hih_{i/2}-h_ihi/2​−hi​ ...

  2. [概率期望][树形DP][LCA]JZOJ 5814 树

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  3. UOJ Round #20 T1 A. 【UR #20】跳蚤电话(组合数+树形DP)

    UOJ Round #20 T1 A. [UR #20]跳蚤电话 题目大意 给出一棵树,求建出该树的不同操作方案数.建树方式如下:初始 S S S集合只有 1 1 1,操作 1 1 1为取已连的边 x ...

  4. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  5. [树形dp] Jzoj P1046 寻宝之旅

    Description 探险队长凯因意外的弄到了一份黑暗森林的藏宝图,于是,探险队一行人便踏上了寻宝之旅,去寻找传说中的宝藏. 藏宝点分布在黑暗森林的各处,每个点有一个值,表示藏宝的价值.它们之间由一 ...

  6. [树形dp] Jzoj P3914 人品问题

    Description 网上出现了一种高科技产品--人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.yzx不相信自己的人品为0.经过了许多研究后,yzx得出了一个更为科学的人品计 ...

  7. #树形dp#jzoj 1010 洛谷 3155 叶子的颜色

    题目 对于每个叶结点u,定义c[u]为从u到根结点的简单路径上第一个有色结点的颜色.给出每个c[u]的值,设计着色方案,使得着色结点的个数尽量少. 分析 这道题可以用树形dp,f[x][0/1]f[x ...

  8. #基环树,树形dp#洛谷 2607 JZOJ 1723 骑士

    题目 有环的没有上司的舞会 分析 那么有环那就不是树形dp了,如何处理环,可以先连起来,树形dp,再把环断掉,再跑一次树形dp,两次的最大值即为答案 代码 #include <cstdio> ...

  9. Luogu4099 HEOI2013 SAO 组合、树形DP

    传送门 值得注意的是一般的DAG的拓扑序列数量是NP问题,所以不能直接入手 题目中给出的图可以看做是一个树形图,虽然方向比较迷.考虑使用树形图的性质 不妨任选一个点为根做树形DP,注意到数的位置与方案 ...

  10. HDU - 4705 Y(树形dp)

    题目链接:点击查看 题目大意:给出一棵树,求三个点不在一条线上的个数 题目分析:正难取反,正着求不管是暴力还是有点技巧都是实现不了的,我们可以求出来三个点在一条直线上的方案数,然后用总的排列组合的方案 ...

最新文章

  1. NLP 新宠:谈Prompt的前世今生
  2. 第十、十一周项目三-警察和厨师(2)
  3. 【发现】彻底清除www.go2000.cc的清除方法
  4. 国内唯一,阿里云容器服务进入 Forrester 领导者象限
  5. 【杂谈】如何让你的2020年秋招CV项目经历更加硬核,可深入学习有三秋季划4大领域32个方向(2020.7.23号后涨价)
  6. 今日Google图标——Frank Lloyd Wright诞辰138周年
  7. getexternalfilesdir 相册_音乐相册(电子相册制作)V5.2 安卓最新版
  8. 终于找到了。 图标搜索、UI设计、移动开发集中导航
  9. FISCO BCOS log日志设置配置
  10. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
  11. 基于MATLAB语音信号的处理与滤波
  12. NRD Studio在线导入Excel模板文件,自动生成人物关系图
  13. linux不识别iwconfig,CentOS中iwconfig命令not found的解决方法
  14. linux 终端复制剪贴板,命令行剪贴板复制和粘贴工具?
  15. 洛谷 P2873 [USACO07DEC]泥水坑Mud Puddles
  16. 简述igp和egp_igp egp
  17. UVALive 4850 Installations 贪心
  18. 服装商城网站 毕业设计-附源码241505
  19. 微信小程序-001-抽签功能-008-简单登录
  20. 嵌入式linux工控板,基于Linux的ARM9工业控制板设计

热门文章

  1. 商业融资项目计划PPT模板
  2. 数字人民币隐私与个人信息保护
  3. centos7桌面没有计算机图标,Centos7,桌面图标消失且右键失效
  4. android tv 卸载应用市场,怎么卸载电视自带软件 如何删除电视内置软件应用
  5. Python爬虫入门教程:蜂鸟网图片爬取
  6. magicbook java开发_荣耀MagicBook2019 Intel版值得买吗 MagicBook2019 Intel版笔记本详细评测...
  7. 【金猿案例展】某大型股份制银行——指标的统一管理和分析平台
  8. 佳能相机G7 Mark Ⅱ (测光与对焦)
  9. 苹果手机速度慢_你玩手机的时候,Ta在用APP学日语 (安卓版APP,苹果也适用)...
  10. windows11系统 “任务管理器已被管理员禁用”怎么解决