Hdu 4661 树上拓扑序计数

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = ;
const int MAXM = ;
const int mod = 1e9 + ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], ed = ;
inline void addedge(int u, int v) {
to[++ed] = v;
nxt[ed] = Head[u];
Head[u] = ed;
}
int T, n;
ll dp[MAXN], sz[MAXN];
ll fac[MAXN], inv[MAXN];
ll anser = ;
ll Qpow(ll a, ll b) {
ll ans = , base = a;
while (b != ) {
if (b & != ) {
ans *= base;
ans %= mod;
}
base *= base;
base %= mod;
b >>= 1LL;
}
return ans;
}
void init() {
fac[] = ;
for (ll i = ; i <= ; i++) {
fac[i] = fac[i - ] * i % mod;
}
for (int i = ; i <= ; i++) {
inv[i] = Qpow(fac[i], mod - );
}
}
void getsz(int x, int fa) {
sz[x] = ;
for (int v, i = Head[x]; i; i = nxt[i]) {
v = to[i];
if (v == fa) {
continue;
}
getsz(v, x);
sz[x] += sz[v];
}
return ;
}
void dp1(int x, int fa) {
dp[x] = ;
for (int v, i = Head[x]; i; i = nxt[i]) {
v = to[i];
if (v == fa) {
continue;
}
dp1(v, x);
dp[x] = ((dp[x] * dp[v]) % mod * inv[sz[v]]) % mod;
}
dp[x] = dp[x] * fac[sz[x] - ] % mod;
return ;
}
void dp2(int x, int fa) {
if (x != ) {
//dp[x] = dp[fa] * sz[x] % mod * inv[n - sz[x]] % mod;
dp[x] = dp[fa] * sz[x] % mod * Qpow(n - sz[x], mod - ) % mod;
anser = (anser + dp[x] * dp[x] % mod) % mod;
}
for (int v, i = Head[x]; i; i = nxt[i]) {
v = to[i];
if (v == fa) {
continue;
}
dp2(v, x);
}
return ;
}
int main() {
init();
int u, v;
scanf("%d", &T);
while (T--) {
anser = ;
scanf("%d", &n);
ed = ;
for (int i = ; i <= n; i++) {
Head[i] = ;
}
for (int i = ; i < n; i++) {
scanf("%d %d", &u, &v);
addedge(u, v), addedge(v, u);
}
getsz(, );
dp1(, );
anser = dp[] * dp[] % mod;
dp2(, );
anser += mod;
anser %= mod;
cout << anser << endl;
}
return ;
}
Hdu 4661 树上拓扑序计数的更多相关文章
- [ARC083F] Collecting Balls [建二分图+环套树定向+建拓扑图+树的拓扑序计数]
题面 [传送门](https://arc083.contest.atcoder.jp/tasks/arc083_d) 思路 这是一道真正的好题 第一步:转化模型 行列支配类的问题,常见做法就是把行和列 ...
- codevs1304 拓扑序计数
题目描述 Description 求一颗有根树/树形图的拓扑序个数. 输入描述 Input Description ...
- 「PKUWC2019」拓扑序计数(状压dp)
考场只打了 \(52\) 分暴力...\(ljc\) 跟我说了一下大致思路,我回去敲了敲. \(f[i]\) 表示状态为 \(i\) 时的方案数.我们用二进制 \(0/1\) 表示不选/选点 \(i\ ...
- HDU 4917 Permutation 拓扑排序的计数
题意: 一个有n个数的排列,给你一些位置上数字的大小关系.求合法的排列有多少种. 思路: 数字的大小关系可以看做是一条有向边,这样以每个位置当点,就可以把整个排列当做一张有向图.而且题目保证有解,所以 ...
- [十二省联考2019]字符串问题——后缀自动机+parent树优化建图+拓扑序DP+倍增
题目链接: [十二省联考2019]字符串问题 首先考虑最暴力的做法就是对于每个$B$串存一下它是哪些$A$串的前缀,然后按每组支配关系连边,做一遍拓扑序DP即可. 但即使忽略判断前缀的时间,光是连边的 ...
- HDU.5692 Snacks ( DFS序 线段树维护最大值 )
HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...
- HDU 5638 Toposort 拓扑排序 优先队列
Toposort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 Description There is a directed acycli ...
- hdu 5111 树上求交
hdu 5111 树上求交(树链剖分 + 主席树) 题意: 给出两棵树,大小分别为\(n1\),\(n2\), 树上的结点权值为\(weight_i\) 同一棵树上的结点权值各不相同,不同树上的结点权 ...
- 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)
3832: [Poi2014]Rally Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 168 Solved: ...
随机推荐
- 【ARM-Linux开发】Linux链接
链接有两种方式:硬链接和软链接. (一)软链接 软链接又叫做符号链接.基本命令为: [plain] view plain copy ln -s sourcePlace newPlace 软链接可以链接 ...
- Windows下直接双击可执行的jar
如果没有设置,那么就是用命令行: jar处在文件夹路径下打开命令行:java -jar xxx.jar 总的来说是有点不方便 首先默认打开jar程序得是相同jdk的java.exe 然后是一闪而过 下 ...
- java中Super到底是什么意思?必须举例说明!
[学习笔记] 3."超"关键字(super keyword) Super是一个参考(或说指针)指向他紧邻的父类(见下面的例子).用super可以指向被隐藏的父类的同名成员. 3.1 ...
- LeetCode 第 167 场周赛
1290.二进制链表转整数 1291.顺次数 1292.元素和小于等于阈值的正方形的最大边长 1293.网格中的最短路径 1290.二进制链表转整数 1290.二进制链表转整数 给你一个单链表的引用结 ...
- (七)mybatis 的输入映射与输出映射
目录 前言 输入映射 - - 传递 pojo 包装类型 (复杂查询 ) 输出映射 - - resultType 输出映射 - - resultMap 前言 通过 paramterType 指定输入参数 ...
- (十六)JDBC 处理大数据
目录 前言: 基本概念 对于Mysql的Text类型 流地址的写法 blob类型数据 备注 前言: 在实际开发中,程序需要把 大文本或二进制 数据保存到数据库中: 实际上,我们并不存储大的数据到数据库 ...
- 测试常用__linux命令
1.显示目录和文件的命令 Ls:用于查看所有文件夹的命令. Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容 Du:显示目录或文件大小 2.修改目录,文件权限和属主及数组命令 ...
- spark异常篇-集群模式无法打印
在集群上运行 spark 时候,对 RDD 进行 foreach(print) 并没有打印任何内容,这是怎么回事呢? 这是因为 RDD 运行在各个 worker 上,foreach 是对 各个 wor ...
- C库函数:scanf、fscanf、printf、fprintf、sprintf、 snprintf
1. scanf 函数原型 int scanf(const char *format, ...); 功能:从标准输入 stdin 读取格式化输入. 2.fscanf 函数原型 int fscanf( ...
- Devexpress xaf针对某个用户登录后在面板中设置导航无效的解决方法
Devexpress xaf框架生成的项目默认情况下导航栏是显示在左侧,有时候我们用某个账户登录后,发现导航栏无法显示在左侧,操作十分不方便.我们可以去数据库删除当前登录用户的自定义布局 解决方法如下 ...