题目链接:【被和谐】

题目大意:对于一棵树$(V,E)$,对于$S\subset V$,$f(S)$为点集$S$的导出子图的边数。求$\sum_{S\subset V}f(S)^k$

这里的导出子图说的是,点集为S,边集为$\{(u,v)\in E|u,v\in S\}$的一个子图。


看到这个$k$次方,马上用斯特林数。

$$ans=\sum_{S\subset V}f(S)^k=\sum_{i=0}^ki!S(k,i)\sum_{S\subset V}{f(S)\choose i}$$

然后考虑怎么求后面那个式子。

这个式子表示在$S$的导出子图里面选$i$条边的方案数,然后就可以树形dp了

设$dp_{x,s,0/1}$表示在以$x$为根的子树内部,选择$s$条边,$x$是否$\in S$的答案。

在新加上一个$x$的子树$v$的时候,$S$只有原来只有新的子树的情况直接加上就行。

还有合在一起的情况,设原来的子树有$j$条边,$v$里面有$k$条边。

则$$dp[x][j+k][0]+=(dp[v][k][0]+dp[v][k][1])*dp[x][j][0]$$$$dp[x][j+k][1]+=(dp[v][k][0]+dp[v][k][1]+[k\not= 0]dp[v][k-1][1])*dp[x][j][1]$$

上面那里为什么要加$dp[v][k-1][1]$呢?因为这时$x$和$v$都在点集里,可以选择$(x,v)$这条边。

注意合在一起的情况还要统计进答案里。

而且由于会出现贡献到自己的情况,所以要用一个辅助数组来存储。

 #include<cstdio>
#include<cstring>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = , mod = ;
int n, m, K, head[N], to[N << ], nxt[N << ], size[N];
inline void add(int a, int b){
static int cnt = ;
to[++ cnt] = b; nxt[cnt] = head[a]; head[a] = cnt;
}
LL dp[N][][], f[][], ans[], S[][];
inline void dfs(int x, int fa){
size[x] = ;
dp[x][][] = ; dp[x][][] = ; ++ ans[];
for(Rint i = head[x];i;i = nxt[i])
if(to[i] != fa){
dfs(to[i], x);
memcpy(f, dp[x], sizeof f);
for(Rint j = ;j <= K && j <= size[to[i]];j ++)
f[j][] = (f[j][] + dp[to[i]][j][] + dp[to[i]][j][]) % mod;
for(Rint j = ;j <= K && j <= size[x];j ++)
for(Rint k = ;k <= K - j && k <= size[to[i]];k ++){
LL S = (dp[to[i]][k][] + dp[to[i]][k][]) % mod;
LL s1 = dp[x][j][] * S % mod, s2 = dp[x][j][] * (S + (k ? dp[to[i]][k - ][] : )) % mod;
f[j + k][] = (f[j + k][] + s1) % mod;
f[j + k][] = (f[j + k][] + s2) % mod;
ans[j + k] = (ans[j + k] + s1 + s2) % mod;
}
memcpy(dp[x], f, sizeof f);
size[x] += size[to[i]];
}
}
int main(){
scanf("%d%d%d", &n, &m, &K);
for(Rint i = ;i < n;i ++){
int a, b;
scanf("%d%d", &a, &b);
add(a, b); add(b, a);
}
dfs(, );
S[][] = ;
for(Rint i = ;i <= K;i ++)
for(Rint j = ;j <= i;j ++)
S[i][j] = (S[i - ][j - ] + S[i - ][j] * j) % mod;
LL fac = , res = ;
for(Rint i = ;i <= K;i ++){
fac = fac * i % mod;
res = (res + fac * S[K][i] % mod * ans[i] % mod) % mod;
}
printf("%lld", res);
}

[GDOI2018]滑稽子图的更多相关文章

  1. GDOI2018 滑稽子图 [斯特林数,树形DP]

    传送门并没有 思路 见到那么小的\(k\)次方,又一次想到斯特林数. \[ ans=\sum_{T} f(T)^k = \sum_{i=0}^k i!S(k,i)\sum_{T} {f(T)\choo ...

  2. 【gdoi2018 day2】第二题 滑稽子图(subgraph)(性质DP+多项式)

    题目大意 [gdoi2018 day2]第二题 滑稽子图(subgraph) 给你一颗树\(T\),以及一个常数\(K\),对于\(T\)的点集\(V\)的子集\(S\). 定义\(f(S)\)为点集 ...

  3. 【gdoi2018 day2】第二题 滑稽子图

    题意: 给出一棵树.设\(E\)表示边集,\(V\)表示点集,\(S\)为\(V\)的一个子集. \(f(S)=|(u,v)|(u,v)\in E \ \&\&\ u\in V\ \& ...

  4. 【GDOI】2018题目及题解(未写完)

    我的游记:https://www.cnblogs.com/huangzihaoal/p/11154228.html DAY1 题目 T1 农场 [题目描述] [输入] 第一行,一个整数n. 第二行,n ...

  5. scrapy 也能爬取妹子图?

    目录 前言 Media Pipeline 启用Media Pipeline 使用 ImgPipeline 抓取妹子图 瞎比比前言 我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需 ...

  6. GDOI2018游记

    前言 不知怎的,本蒟蒻居然拿到了GDOI参赛名额 于是乎,我稀里糊涂地跟着诸位大佬屁颠屁颠地来到了阔别已久的中山一中 腐败difficult and interesting的GDOI比赛就这样开始了. ...

  7. 最大半连通子图 bzoj 1093

    最大半连通子图 (1.5s 128MB) semi [问题描述] 一个有向图G = (V,E)称为半连通的(Semi-Connected),如果满足:∀ u, v ∈V,满足u->v 或 v - ...

  8. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  9. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

随机推荐

  1. 【javascript】console 让 js 调试更简单

    浏览器的控制台(console)是最重要的面板,主要作用是显示网页加载过程中产生各类信息. 显示信息 console.log('hello world'); console.debug('debug' ...

  2. Java知多少(34)final关键字:阻止继承和多态

    在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...

  3. docker开源仓库Harbor部署笔记

    Harbor介绍Harbor是Vmvare团队开发的开源企业级registry仓库,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务.项目地址:ht ...

  4. laravel数据库配置

    1.说明,查看laravel数据库配置 项目名/config/database.php     'default' => env('DB_CONNECTION', 'mysql') 2.数据开发 ...

  5. [Converge] Batch Normalisation

    参考:https://www.zhihu.com/question/38102762 参考:CNN和RNN中如何引入BatchNorm 论文:Batch Normalization: Accelera ...

  6. SpringBoot自定义错误页面,SpringBoot 404、500错误提示页面

    SpringBoot自定义错误页面,SpringBoot 404.500错误提示页面 SpringBoot 4xx.html.5xx.html错误提示页面 ====================== ...

  7. Linux设备驱动剖析之IIC(二)

    953行,适配器的编号大于MAX_ID_MASK是不行的,MAX_ID_MASK是一个宏,展开后的值为61. 957至968行,关于管理小整形ID数的,没怎么了解,略过. 974行,调用i2c_reg ...

  8. [Python]编程之美

    Task 1 : 首字母大写 import re #python 正则表达式包:re s='hello world' s=re.sub(r"\w+",lambda match:ma ...

  9. iOS动画篇:核心动画

    转:http://www.cocoachina.com/ios/20160517/16290.html 基本概念 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的 ...

  10. 9.25中间件和Django的学过的知识总结

    2018-9-25 12:10:54 参考连接:http://www.cnblogs.com/liwenzhou/p/8761803.html 浏览器访问Django的过程 面试时容易问到   Dja ...