题目链接:【被和谐】

题目大意:对于一棵树$(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. ZeroMQ总结

    Socket types Thread safety: ZeroMQ的socket是非线程安全的,并且ZeroMQ本身不建议在多个线程中传递同一个Socket,即使保证了线程同步.   Socket ...

  2. ubuntu下mysql远程连接和访问慢的解决方法

    原本连接很快的mysql服务器,连接速度奇慢.以前几十毫秒的连接现在完成一次要近5秒钟,在排除了网络问题后,只有从mysql下手.原来每次访问db,mysql就会试图去解析来访问的机器的domain ...

  3. Java8学习笔记(六)--Optional

    前言 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的 ...

  4. 关于JSON call 的一个小问题

    如图当我们在做Json call 的时候,一定要切记,建立的model 一定要与JSON 字符串严格的一一对应,否者会解析不出来

  5. spring框架排错

    1.格式错误. http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/sp ...

  6. 三剑客之grep

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  7. 线段树 || BZOJ 1112: [POI2008]砖块Klo

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1112 题解: 希望有连续K柱的高度是一样的,就先把1~K的数扔进线段树(线段树的下标就是数值 ...

  8. echarts tooltip 自定义提示信息添加圆点

    tooltip自定义时,给文字前加圆点 tooltip: { formatter: '{b}<br /><span style="display:inline-block; ...

  9. CountDownLatch简单使用

    CountDownLatch介绍 CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过 ...

  10. export,import ,export default区别

    export,import ,export default区别 一.export,import ,export default ES6模块主要有两个功能:export和import export用于对 ...