//    uva 11174 Stand in a Line
//
// 题目大意:
//
// 村子有n个村民,有多少种方法,使村民排成一条线
// 使得没有人站在他父亲的前面.
//
// 解题思路:
//
// 换成模型,先将森林变成一棵树,这样就直观多了,对于
// 一个节点,他的子节点排列时没有任何要求,而子排列中会有
// 限制,将这些限制先提取出来,就可以将所有的视为相同的了,
// 然后就是有重复元素的全排列问题.设s(i)为以i节点为根的子树
// f(i)为以i为根的子树的排法,
// f(i) = f(c1)f(c2)...(s(i)-1)! / (s(c1)!s(c2)!...s(ck)!);
// cj为i的第j个儿子.递归发现所有的非根节点的f带入上式,发现所有的
// 非根节点u都会以(s(u)-1)!出现在以他为根的分子中,s(u)出现在他父
// 节点的分母中,约分之后,分子为1,分母为s(u),这样就得到了一个
// 简化的式子,:
// f(root) = (s(root)-1)!/(s(c1)s(c2)...s(ck));
// s(root) = n + 1;
// 最后的结果为n!除以所有的s(i). #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector> using namespace std; const int MAX_N = ; typedef long long ll; vector<int> g[MAX_N]; const ll MOD = 1e9 + ; int cnt[MAX_N];
bool vis[MAX_N];
int n,m; void dfs(int u){
vis[u] = ;
cnt[u]=;
for (int i=;i<g[u].size();i++){
int v = g[u][i];
if (vis[v])
continue; dfs(v); cnt[u] += cnt[v];
}
} void exgcd(ll a,ll b,ll &x,ll &y){
if (b==){
x = ;
y = ;
return ;
}
exgcd(b,a%b,x,y);
ll temp = x;
x = y;
y = temp - a / b * y;
} void print(){
for (int i=;i<=n;i++){
printf("%d ",cnt[i]);
}
cout << endl;
} void input(){
scanf("%d%d",&n,&m);
ll ans = ;
memset(cnt,,sizeof(cnt));
memset(vis,,sizeof(vis));
for (int i=;i<=n;i++){
ans = ans * i % MOD;
g[i].clear();
}
int u,v;
for (int i=;i<=m;i++){
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
} for (int i=;i<=n;i++){
if (!vis[i])
dfs(i);
}
// print();
ll p = ; for (int i=;i<=n;i++){
p = p * cnt[i] % MOD;
} //printf("cnt = %lld\n",p); ll x,y; exgcd(MOD,p,x,y); cout << ans * ((y + MOD )%MOD) % MOD << endl; } int main(){
int t;
// freopen("1.txt","r",stdin);
scanf("%d",&t);
while(t--){
input();
}
}

uva 11174 Stand in a Line的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. 数学:UVAoj 11174 Stand in a Line

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

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

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

  9. UVa 12657 Boxes in a Line(应用双链表)

    Boxes in a Line You have n boxes in a line on the table numbered 1 . . . n from left to right. Your ...

随机推荐

  1. SQLServer2008R2 error 40解决方法

    实际遇到的问题,以下为搜到的解决方案,亲测可用 转自 http://blog.csdn.net/laga516/article/details/7696577 最近一直在配置服务器, 这当中最头疼的就 ...

  2. 【Python全栈笔记】07 [模块二] 20 Oct 冒泡排序

    给出一个列表,进行冒泡排序 原理算法: li = [52, 37, 23, 11, 3, 1, ] print(li) # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 # 一共循 ...

  3. nosql数据库学习

    1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上 ...

  4. search 搜索

    hosts文件路径 C:/WINDOWS/system32/drivers/etc/hosts host tnsnames.ora文件路径 C:/oraclexe/app/oracle/product ...

  5. JavaScript Dom基础

    一.DOM查找 1.document.getElementById("id") -功能:返回对拥有指定ID的第一个对象的引用 -返回值:DOM对象 -说明:id为DOM元素上id属 ...

  6. CodeFirst进行数据迁移之添加字段

    一.为模型更改设置 Code First 数据迁移 1.工具->库程序包管理器->程序包管理器控制台->输入"Enable-Migrations"  或者 Ena ...

  7. php学习笔记-基础篇

    1."var_dump"函数可以将变量的数据类型显示出来. 2."memory_get_usage"获取当前PHP消耗的内存. 3.php中的字符串型分单引号, ...

  8. spark2.0配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. lamp php的ssl,ssh支持

    Php支持ssl,ssh扩展: 准备:可以成功解析php 1.curl的安装 [root@localhost~]# cd /usr/local/src/ [root@localhost~]# wget ...

  10. ThinkPad L440 FN键设置

    刚入手了ThinkPad L440,用起来相当不错,嘿嘿! L440系统默认(F1-F12)键盘为系统默认功能键,主要控制音量.亮度.连接投影仪等. 因为编写程序需要调试,经常用到F10,F11等键, ...