保镖排队 (Standard IO)

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

代码

#include <cstdio>
#include <cstring>
#include <string>
#define mo 10007
#define N 1005
using namespace std;int size[N],f[N],n,t,l;
int jc[N],ny[N];
int a[N][N];int ksm(int x,int y)
{int ret=1;while (y){if (y&1) ret=ret*x%mo;x=x*x%mo;y/=2;}return ret;
}int C(int x,int y){return jc[x]*ny[x-y]%mo*ny[y]%mo;}void dfs(int x)
{f[x]=size[x]=1;int tot=0;for (int i=a[x][0];i>=1;i--){int y=a[x][i];dfs(y);tot+=size[y];f[x]=(((f[x]*f[y])%mo)*C(tot-1,size[y]-1))%mo;}size[x]+=tot;
}int main()
{scanf("%d",&t);jc[0]=ny[0]=1;for (int i=1;i<=1000;i++){jc[i]=jc[i-1]*i%mo;ny[i]=ksm(jc[i],mo-2);}while (t--){memset(f,0,sizeof(f));memset(size,0,sizeof(size));scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&a[i][0]);for (int j=1;j<=a[i][0];j++)scanf("%d",&a[i][j]);}dfs(1);printf("%d\n",f[1]);}
}

jzoj1794 保镖排队 (树形dp)相关推荐

  1. 算法设计与分析 树形dp

    树形dp 概述 题目一:二叉树节点间的最大距离问题 题目二:排队最大快乐值(多叉树问题) 题目三:判断是否为满二叉树 题目四:判断是否为平衡二叉树 题目五:判断是否为二叉排序树 概述 使用前提:如果题 ...

  2. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

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

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

  4. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  5. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  6. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  7. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  8. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  9. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

  10. 树形dp ---- 2018年杭电多校第二场 H travel

    题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...

最新文章

  1. APP转让时提示:您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息
  2. 设计模式(一) 单例模式
  3. vmware占用c盘空间_W7 64位装系统,硬盘全部都格式化和分区了,系统装上后C盘占了40G,这是怎么回事?...
  4. 稳定匹配算法python实现
  5. 产品入门首月成长报告 | PMcaff-干货
  6. NYOJ 1075 (递推 + 矩阵快速幂)
  7. C++实现md5加密或计算文件的唯一性识别
  8. 教你正确把加减乘除运用在MySQL里面
  9. Luogu P1122 最大子树和 树形DP
  10. C++:求五位学生的总成绩以及平均成绩
  11. windows tensorflow 版本与升级
  12. cesium 原生抛物线
  13. NSIS中文用户手册下载(免费下载)
  14. freeswitch+kamailio+unimrcp
  15. CNN之Xception Keras实现模型训练
  16. Java - 为什么String在Java中是不可变的?
  17. 从音频提取音高以及音符
  18. 图片链接(a标签和img标签的使用)
  19. 11月书讯(下) | 拿下这些新书,赢在起跑线
  20. 决策树模型 朴素贝叶斯模型_有关决策树模型的概述

热门文章

  1. 网络空间安全 渗透 攻防5(文件共享服务器)
  2. PAT(甲级)2021年冬季考试 7-2 Rank a Linked List
  3. 代做linux作业,Linux系统管理第七周作业【Linux微职位】(示例代码)
  4. 百度地图坐标系统解析
  5. Deepin 手动安装显卡驱动
  6. Alphabetic Removals(水题)
  7. String.intern源码
  8. 如何查看电脑mac地址
  9. jquery实现类似以前凡客诚品右侧图文切换结合效果
  10. 2012年8月21日