题意

PDF

分析

\[
f(i)=f(c_1)f(c_2)\dots\times(s(i)-1)!/(s(c_1)!s(c_2)! \dots s(c_k)! )\\
f(root)=(s(root)-1)!/(s(1)s(2)s(3)\dots s(n))
\]
预处理阶乘以及逆元。

时间复杂度\(O(Tn)\)

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<set>
  6. #include<map>
  7. #include<queue>
  8. #include<stack>
  9. #include<algorithm>
  10. #include<bitset>
  11. #include<cassert>
  12. #include<ctime>
  13. #include<cstring>
  14. #define rg register
  15. #define il inline
  16. #define co const
  17. template<class T>il T read()
  18. {
  19. rg T data=0;
  20. rg int w=1;
  21. rg char ch=getchar();
  22. while(!isdigit(ch))
  23. {
  24. if(ch=='-')
  25. w=-1;
  26. ch=getchar();
  27. }
  28. while(isdigit(ch))
  29. {
  30. data=data*10+ch-'0';
  31. ch=getchar();
  32. }
  33. return data*w;
  34. }
  35. template<class T>T read(T&x)
  36. {
  37. return x=read<T>();
  38. }
  39. using namespace std;
  40. typedef long long ll;
  41. co int N=4e4+1,mod=1e9+7;
  42. int fac[N],inv[N];
  43. int mul(int x,int y)
  44. {
  45. return (ll)x*y%mod;
  46. }
  47. int qpow(int x,int k)
  48. {
  49. int res=1;
  50. while(k)
  51. {
  52. if(k&1)
  53. res=mul(res,x);
  54. x=mul(x,x),k>>=1;
  55. }
  56. return res;
  57. }
  58. int n,fa[N];
  59. int nx[N],to[N];
  60. int siz[N];
  61. void dfs(int x)
  62. {
  63. siz[x]=1;
  64. for(int i=to[x];i;i=nx[i])
  65. {
  66. dfs(i);
  67. siz[x]+=siz[i];
  68. }
  69. }
  70. int main()
  71. {
  72. // freopen(".in","r",stdin);
  73. // freopen(".out","w",stdout);
  74. fac[0]=fac[1]=1;
  75. inv[0]=inv[1]=1;
  76. for(int i=2;i<N;++i)
  77. {
  78. fac[i]=mul(i,fac[i-1]);
  79. inv[i]=mul(mod-mod/i,inv[mod%i]);
  80. }
  81. int T=read<int>();
  82. while(T--)
  83. {
  84. read(n);
  85. fill(fa,fa+n+1,0);
  86. fill(nx,nx+n+1,0);
  87. fill(to,to+n+1,0);
  88. int m=read<int>();
  89. for(int i=1;i<=m;++i)
  90. {
  91. int a=read<int>(),b=read<int>();
  92. fa[a]=b;
  93. nx[a]=to[b],to[b]=a;
  94. }
  95. for(int i=1;i<=n;++i)
  96. if(!fa[i])
  97. nx[i]=to[0],to[0]=i;
  98. dfs(0);
  99. int ans=fac[n];
  100. for(int i=1;i<=n;++i)
  101. ans=mul(ans,inv[siz[i]]);
  102. printf("%d\n",ans);
  103. }
  104. return 0;
  105. }

UVA11174 Stand in a Line的更多相关文章

  1. uva 11174 Stand in a Line

    // uva 11174 Stand in a Line // // 题目大意: // // 村子有n个村民,有多少种方法,使村民排成一条线 // 使得没有人站在他父亲的前面. // // 解题思路: ...

  2. 数学:UVAoj 11174 Stand in a Line

    Problem J Stand in a Line Input: Standard Input Output: Standard Output All the people in the bytela ...

  3. 【递推】【推导】【乘法逆元】UVA - 11174 - Stand in a Line

    http://blog.csdn.net/u011915301/article/details/43883039 依旧是<训练指南>上的一道例题.书上讲的比较抽象,下面就把解法具体一下.因 ...

  4. UVA 11174 Stand in a Line (组合+除法的求模)

    题意:村子里有n个人,给出父亲和儿子的关系,有多少种方式可以把他们排成一列,使得没人会排在他父亲的前面 思路:设f[i]表示以i为根的子树有f[i]种排法,节点i的各个子树的根节点,即它的儿子为c1, ...

  5. UVa 11174 (乘法逆元) Stand in a Line

    题意: 有n个人排队,要求每个人不能排在自己父亲的前面(如果有的话),求所有的排队方案数模1e9+7的值. 分析: <训练指南>上分析得挺清楚的,把公式贴一下吧: 设f(i)为以i为根节点 ...

  6. UVA 11174 Stand in a Line 树dp+算

    主题链接:点击打开链接 题意:白书的P103. 加个虚根就能够了...然后就是一个多重集排列. import java.io.PrintWriter; import java.util.ArrayLi ...

  7. UVA 11174 Stand in a Line 树上计数

    UVA 11174 考虑每个人(t)的所有子女,在全排列中,t可以和他的任意子女交换位置构成新的排列,所以全排列n!/所有人的子女数连乘   即是答案 当然由于有MOD 要求逆. #include & ...

  8. UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)

    这两个题的模型是有n个人,有若干的关系表示谁是谁的父亲,让他们进行排队,且父亲必须排在儿子前面(不一定相邻).求排列数. 我们假设s[i]是i这个节点,他们一家子的总个数(或者换句话说,等于他的子孙数 ...

  9. uva 11174 Stand in a Line (排列组合)

    UVa Online Judge 训练指南的题目. 题意是,给出n个人,以及一些关系,要求对这n个人构成一个排列,其中父亲必须排在儿子的前面.问一共有多少种方式. 做法是,对于每一个父节点,将它的儿子 ...

随机推荐

  1. ubuntu linux 1604 编译安装tesseract-ocr 4.0

    主要参考官方的编译,梳理一下整个流程 Linux The build instructions for Linux also apply to other UNIX like operating sy ...

  2. MySQL数据库表分区功能详解

    1.什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表 ...

  3. 在react-native中使用redux

    redux是什么? redux是一个用于管理js应用状态的容器.redux出现时间并不是很长,在它出现之前也有类似功能的模块出现,诸如flux等等.redux设计的理念很简单,似乎最初这个开发团队就有 ...

  4. AMD C1E SUPPORT

    •C1E是一种电源管理状态,它可以让处理器节能不限于处理器内核.在CIE状态,可以通过降低内存时钟速度.关闭HT技术,来降低处理器能耗.这种新功能对于12核的处理器极其重要,因为这种处理器在设计上既增 ...

  5. 一次穿墙渗透测试,利用IPC跨域

    Shell是怎么拿下的我们就不纠结了. 我们来上传菜刀一句话,来仔细分析分析. 先来看看内网环境把. 很高兴的是现在管理员在线.可以抓去文明密码. 但是很悲催的又是.服务器不支持走TCP协议.HTTP ...

  6. 字符串拆分split

    public static void main(String[] args) { String s = "A1B2C3D4E5F6G7H8"; String[] arr1 = s. ...

  7. Sub-process /usr/bin/dpkg returned an error code (1) 如何解决

    cd /var/lib/dpkg sudo mv info info.bak sudo mkdir info sudo dpkg --configure -a sudo apt-get install ...

  8. redis的Python接口调用

    Redis安装及教程: redis教程 安装Python的redis接口模块 redis-py requires a running Redis server. See redis教程 for ins ...

  9. Android源码下载和编译过程

    这是我在编译android源码时整理记录的编译步骤和错误解决方法,期间参考了一些网上的博客和教程. 第一步: 安装ubuntu12.04,分配一盘空间50G,2G内存.如果分配1G内存编译时将报错.( ...

  10. WPF中关于配置文件的读取

    在WPF中的配置文件的读取也是经常用到的一个操作,虽然很基础,但是也记录一下,以后忘记了可以看一看. 首先就是先新建一个Application Configuration Flie后缀名是.confi ...