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: ...
随机推荐
- Java实现汉诺塔移动,只需传一个int值(汉诺塔的阶)
public class HNT { public static void main(String[] args) { HNT a1 = new HNT(); a1.lToR(10); //给汉诺塔a ...
- Hadoop学习笔记之三 数据流向
http://hadoop.apache.org/docs/r1.2.1/api/index.html 最基本的: 1. 文本文件的解析 2. 序列文件的解析 toString会将Byte数组中的内存 ...
- Kafka 1.1.0 服务端源码阅读笔记
网络层 01: 服务器的启动 02: Acceptor和Processor 03: RequestChannel API层 04: Handler和Apis 06: Produce请求(1): 写入本 ...
- Python基础总结之初步认识---class类(中)。第十四天开始(新手可相互督促)
昨天简单的认识类怎么定义,什么是类,类如何调用.今天的笔记会大概补充一些内容,明天的笔记会细致讲解,加深个印象即可 今天我们在了解下:类的属性,类属性属于类也属于实例化对象.也就是说类的实例化对象可以 ...
- 《PC Assembly Language》读书笔记
本书下载地址:pcasm-book. 前言 8086处理器只支持实模式(real mode),不能满足安全.多任务等需求. Q:为什么实模式不安全.不支持多任务?为什么虚模式能解决这些问题? A: 以 ...
- B7. Concurrent 锁的分类
[概述] 锁的分类根据不同的维度可以分为以下几种: 悲观锁和乐观锁 共享锁(S锁,读锁)和排他锁(X锁,写锁) 公平锁和非公平锁 重入锁 分段锁 [悲观锁和乐观锁] 悲观锁和乐观锁是两种处理并发冲突的 ...
- 自动输入密码执行远程服务器上的java -version命令
自动输入密码执行远程服务器上的java -version命令 for i in $(seq 1 253);do sshpass -p "W123hz" ssh weili@192. ...
- CREATE TABLE——数据定义语言 (Data Definition Language, DDL)
Sql语句分为三大类: 数据定义语言,负责创建,修改,删除表,索引和视图等对象: 数据操作语言,负责数据库中数据的插入,查询,删除等操作: 数据控制语言,用来授予和撤销用户权限. 数据定义语言 (Da ...
- 20190804-Python基础 第二章 列表和元组
容器,Python支持一种数据结构的基本概念(容器,基本上就是可包含其他对象的对象.) 两种主要的容器是:序列(如列表和元组)和映射(如字典) Ps: 列表与元组区别,列表可修改,元组不能. 对序列的 ...
- fastdfs 集群搭建
1.部署FastDFS及Nginx (本套FastDFS为简化版安装部署,只需解压至普通用户家目录下或者任意目录,解压后修改脚本,执行脚本后即可使用.) 说明:FastDFS分为tracker(默认端 ...