题目链接

\(Description\)

给定一棵\(n\)个点的树。将这\(n\)个点两两配对,并对每一对点的最短路径染色。求有多少种配对方案使得所有边都至少被染色一次。
\(n\leq5000\)。

\(Solution\)

考虑容斥。令边集\(E\)的子集\(S\in E\),\(f(S)\)表示使得\(S\)中所有边都不被染色的配对方案数(其余边任意),则\(Ans=\sum_{S\in E}(-1)^{|S|}f(S)\)。
如果确定边集\(S\),我们可以求\(f(S)\)。设\(S\)将树分成了大小分别为\(a_1,a_2,...,a_{|S|+1}\)的连通块,则每一连通块内的点可以任意配对,\(f(S)=\prod_{i=1}^{|S|+1}g(a_i)\)。
\(g(n)\)即\(n\)个点两两任意配对的方案数,\(g(n)=[2\mid n](n-1)\times(n-3)\times...\times3\times1=[2\mid n](n-1)!!\)。
(\(!!\)是双阶乘)

考虑DP求所有\(f(S)\)。\(f[i][j]\)表示当前为\(i\)的子树,连通块大小为\(j\)的方案数。转移就是树上背包。
最后有\(f[i][0]=\sum_{j=1}^{sz[i]}-1\times f[i][j]\times g(j)\)。\(-1\)即边集\(S\)多了一条边,乘一个容斥系数。

复杂度\(O(n^2)\)。

//101ms 97920KB
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define mod 1000000007
#define Mod(x) x>=mod&&(x-=mod)
typedef long long LL;
const int N=5005;int Enum,H[N],nxt[N<<1],to[N<<1],f[N][N],sz[N],g[N];inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}
inline void AE(int u,int v)
{to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
void DFS(int x,int fa)
{static int tmp[N];sz[x]=1;int *fx=f[x]; fx[1]=1;for(int i=H[x],v; i; i=nxt[i])if((v=to[i])!=fa){DFS(v,x);for(int j=0,sv=sz[v]; j<=sz[x]; ++j)for(int k=0; k<=sv; ++k)tmp[j+k]+=1ll*fx[j]*f[v][k]%mod, Mod(tmp[j+k]);for(int j=0,l=sz[x]+sz[v]; j<=l; ++j)fx[j]=tmp[j], tmp[j]=0;sz[x]+=sz[v];}LL t=0;for(int i=1; i<=sz[x]; ++i) t+=mod-1ll*fx[i]*g[i]%mod;fx[0]=t%mod;
}int main()
{int n=read();for(int i=1; i<n; ++i) AE(read(),read());g[0]=1;for(int i=2; i<=n; i+=2) g[i]=1ll*g[i-2]*(i-1)%mod;DFS(1,1), printf("%d\n",mod-f[1][0]);return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/9760337.html

ARC 101E.Ribbons on Tree(容斥 DP 树形背包)相关推荐

  1. LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP

    神仙容斥+DP可还行. code: #include <cstdio> #include <cmath> #include <vector> #include &l ...

  2. 洛谷P3349:小星星(容斥dp)

    解析 先安利一波洛谷上我介绍如何用暴力日过去的博客 现在开始务正业 考虑把dp记录状态的一维s去掉 这样单次转移复杂度变成n3n^3n3 但是这样显然会算多啊! 因为一个编号可能会用很多次 考虑容斥 ...

  3. LOJ3124 CTS2019 氪金手游 概率、容斥、树形DP

    传送门 D2T3签到题可真是IQ Decrease,概率独立没想到然后就20pts滚粗了 注意题目是先对于所有点rand一个权值\(w\)然后再抽卡. 先考虑给出的关系是一棵外向树的情况.那么我们要求 ...

  4. P4707 重返现世 扩展 MinMax 容斥+DP

    题目传送门 https://www.luogu.org/problem/P4707 题解 很容易想到这是一个 MinMax 容斥的题目. 设每一个物品被收集的时间为 \(t_i\),那么集齐 \(k\ ...

  5. 洛谷P4707 重返现世(扩展MinMax容斥+dp)

    传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...

  6. 840C - On the Bench (容斥 + DP)

    840C - On the Bench 题意 给定序列 a[1...n]a[1...n]a[1...n],求有多种 aaa 的排列,满足任意两个相邻的数乘积不是完全平方数,答案对 109+710^9+ ...

  7. P5643-[PKUWC2018]随机游走【min-max容斥,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P5643 题目大意 给出nnn个点的一棵树,一个人从点xxx开始随机游走,然后QQQ次询问给出一个点集SSS,求期望 ...

  8. ARC115E-LEQ and NEQ【容斥,dp,线段树】

    正题 题目链接:https://atcoder.jp/contests/arc115/tasks/arc115_d 题目大意 nnn个数字的序列xxx,第xi∈[1,Ai]∩Zx_i\in [1,A_ ...

  9. P4859-已经没有什么好害怕的了【容斥,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4859 题目大意 两个长度为nnn的序列a,ba,ba,b两两匹配,求ai>bia_i>b_iai​& ...

  10. 牛客练习赛71C-数学考试【容斥,dp】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/7745/C 题目大意 求一nnn的排列,给mmm个限制pip_ipi​表示1∼pi1\sim p_i1∼pi​ ...

最新文章

  1. C++中一些你不知道的冷知识
  2. Java项目:前台预定+后台管理酒店管理系统(java+SSM+jsp+mysql+maven)
  3. 数据结构--选择排序
  4. jqgrid学习(2)搜索
  5. 深入浅出深度学习(二)分类器
  6. :传递给 left 或 substring 函数的长度参数无效。_Java函数式编码结构-好程序员
  7. 计算机2级u盘作弊,一种带LED指示灯的计算机考试防U盘作弊装置制造方法及图纸...
  8. 一台服务器搭建部署两个或多个Redis实例
  9. mvp内粗泄露问题_如何在一天内从MVP转到生产服务器
  10. 双目立体视觉匹配算法-----SAD匹配算法、BM算法、SGBM算法、GC算法
  11. 数据传输服务 DTS > 产品简介 > 功能特性 > 数据订阅(新版)
  12. 联想,寻找下一个时代的联想
  13. 【译】AS3利用CPU缓存
  14. 获取ip地址 域名获取与解析
  15. 使用Cocos creator开发一个文字游戏
  16. 【DP算法篇之初学】LIS\LCS\二维DP\带条件DP
  17. 什么是私域?什么是会员制?
  18. 修改sublimeText 文件目录窗口样式
  19. python任务栏显示网速_win10状态栏显示网速小工具_超好用
  20. Premiere 初识PR

热门文章

  1. 拓端tecdat|R语言中的生存分析Survival analysis晚期肺癌患者4例
  2. 拓端tecdat|Tableau 数据可视化:探索性图形分析新生儿死亡率数据
  3. 拓端tecdat|HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率
  4. 拓端tecdat|R语言markov switching model马尔可夫转换分析研究水资源
  5. 软件工程 第五章 详细设计
  6. 康奈尔大学计算机科学人工智能,美国康奈尔大学工程学院申请之计算机科学
  7. Ubuntu 查看 Cuda 及 版本
  8. 20170910算法工程师在线笔试
  9. 机器学习常见算法个人总结
  10. 计算机 会议录用率 统计