lightoj 1382 - The Queue(树形dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1382
题解:简单的树形dp加上组合数学。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define mod 1000000007
using namespace std;
typedef long long ll;
const int M = ;
ll dp[M] , C[M][M];
int fa[M] , num[M];
vector<int> vc[M];
void find_num(int u , int pre) {
num[u] = ;
int len = vc[u].size();
for(int i = ; i < len ; i++) {
int v = vc[u][i];
if(v == pre) continue;
find_num(v , u);
num[u] += num[v];
}
}
void dfs(int u , int pre) {
int len = vc[u].size();
ll ans = , sum = num[u];
for(int i = ; i < len ; i++) {
int v = vc[u][i];
if(v == pre) continue;
dfs(v , u);
ans *= (C[sum - ][num[v]] * dp[v]) % mod;
ans %= mod;
sum -= num[v];
}
dp[u] = ans;
dp[u] %= mod;
}
int main() {
int t , n;
int Case = ;
scanf("%d" , &t);
C[][] = ;
for(int i = ; i <= M - ; i++) {
C[i][] = ;
for(int j = ; j <= i ; j++)
C[i][j] = (C[i - ][j - ] + C[i - ][j]) % mod;
}
while(t--) {
scanf("%d" , &n);
for(int i = ; i <= n ; i++) {
vc[i].clear();
dp[i] = ;
fa[i] = -;
num[i] = ;
}
for(int i = ; i < n - ; i++) {
int u , v;
scanf("%d%d" , &u , &v);
vc[u].push_back(v);
fa[v] = u;
}
int root = ;
for(int i = ; i <= n ; i++) {
if(fa[i] == -) {
root = i;
break;
}
}
find_num(root , -);
dfs(root , -);
printf("Case %d: %lld\n" , ++Case , dp[root] % mod);
}
return ;
}
lightoj 1382 - The Queue(树形dp)的更多相关文章
- LightOj 1230 Placing Lampposts(树形DP)
题意:给定一个森林.每个节点上安装一个灯可以覆盖与该节点相连的所有边.选择最少的节点数num覆盖所有的边.在num最小的前提下,合理放置num个灯使得被两个灯覆盖的边最多? 思路:F[i][0]代表没 ...
- lightoj 1201 - A Perfect Murder(树形dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1201 题解:简单的树形dp,dp[0][i]表示以i为根结点不傻i的最多有多少 ...
- 1382 - The Queue
1382 - The Queue PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB On som ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
- COGS 2532. [HZOI 2016]树之美 树形dp
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
- 树形DP
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
- bzoj2500: 幸福的道路(树形dp+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- HDU 1520 树形dp裸题
1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...
随机推荐
- 记录eclipse中文出现空格宽度不一致的bug
起因 不久前更新了 eclipse(2019-03) 版本:突然发现出现了,使用注释使用中出现的空格的间隔大小不一致的问题,具体可以看下图: 遇到这种问题简直逼不能忍,在网上搜一下解决方式: 谷歌 搜 ...
- 总结Idea环境,吐血踩过的坑
1)首先是JDK环境安装,这一步千万要出错,我就是配错了CLASSPATH导致了很诡异的问题.可能结果:就是RUN到tomcat不报错,但是有404错误. 2)然后是IDEA安装,这里要十分注意如果你 ...
- 1、JAVA的小白之路
大学的时光过得很快,转眼我已经大二了,在大一时,学习了C\C++,对于语言有一定基础,在未来的道路上,我需要攒足干劲,积累足够的知识和技能,去走上社会. 我的第一任大学班主任告诉我:“作为程序员,你至 ...
- Go中配置文件读取的几种方式
日常开发中读取配置文件包含以下几种格式: json 格式字符串 K=V 键值对 xml 文件 yml 格式文件 toml 格式文件 前面两种书写简单,解析过程也比较简单.xml形式书写比较累赘,yml ...
- Kafka基本知识入门(一)
1. 基础知识 有关RabbitMQ,RocketMQ,Kafka的区别这个网上很多,了解一下区别性能,分清什么场景使用.分布式环境下的消息中间件Kafka做的比较不错,在分布式环境下使用频繁,我也不 ...
- 还在为垂直居中苦恼?CSS 布局利器 flexbox 轻轻松松帮你搞定
传统的 CSS 布局方式是基于盒模型(它是根据盒子与父盒子以及兄弟盒子的关系确定大小和位置的算法),实现时依赖于 block, inline, table, position, float 这些属性, ...
- DT-06 For MQTT
感谢关注深圳四博智联科技有限公司产品!我公司提供完整的WiFi信号强度采集方案,包括WiFi信号采集.设备远程管理平台.智能终端应用等. Doit_MQTT透传固件基于乐鑫ESP_IOT_SDK使用C ...
- 【模板】zkw线段树
题意简述 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 代码 #include <cstdio> using namespace std; in ...
- spark源码阅读---Utils.getCallSite
1 作用 当该方法在spark内部代码中调用时,会返回当前调用spark代码的用户类的名称,以及其所调用的spark方法.所谓用户类,就是我们这些用户使用spark api的类. 2 内部实现 2.1 ...
- 中间件增强框架之InterceptFramework
本文讲解MOF中的InterceptFramework框架.该框架可以在应用启动过程中获取画像信息,实现应用画像数据采集和存储. 一.前言 在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重 ...