题意

在一个有nnn个点的树上,nnn为偶数,把所有的点两两配对,配对点之间的路径染色,求把树上所有路径染色的方案数,对1e9+71e9 + 71e9+7取模

这个题完全想不出来 最后还是RudyGayRudy\ GayRudy Gay告诉我才过了啊

设f(F)(F⊆E)f(F) (F⊆E)f(F)(F⊆E)为FFF集合中的所有边都没被覆盖的方案数

那么Ans=∑F⊆E(−1)∣F∣f(F)Ans = \sum\limits{F\subseteq E}(-1)^{|F|}f(F)Ans=∑F⊆E(−1)∣F∣f(F)

对于一个给定的FFF, f(F)f(F)f(F)很好算

因为这∣F∣|F|∣F∣条边把树分成了∣F∣+1|F| + 1∣F∣+1 个联通块

所以 f(F)=∏i=1∣F∣+1g(ni)f(F)=\prod\limits_{i=1}^{|F|+1}g(n_i)f(F)=i=1∏∣F∣+1​g(ni​)

其中g(x)g(x)g(x)表示把xxx个点任意配对的方案数

我们可以对于每个子树来考虑 若子树内都匹配完

相当于其连向父亲的边被要求删除了 就可以用树形dpdpdp来求解了

那么我们可以设f[i][j]f[i][j]f[i][j]表示在iii子树内有jjj个点要与子树外的点匹配的方案数

那么我们暴力枚举子树转移就可以了

时间复杂度Θ(n2)\Theta(n^2)Θ(n2)

这个东西证明的话就是对于任意两个点只会在他们lcalcalca算贡献的时候被枚举一次

然后每两个点的lcalcalca是唯一的,所以总复杂度是O(n2)O(n^2)O(n2)的

特别地, j=0j = 0j=0的时候iii向它父亲的边一定是没有被覆盖的

这个时候因为多了这一条边 容斥系数要乘上−1-1−1

所以f[i][0]=−∑j=1sizeif[i][j]×g[j]f[i][0] = -\sum_{j = 1}^{size_i}f[i][j]×g[j]f[i][0]=−∑j=1sizei​​f[i][j]×g[j]

或者也可以这样考虑 如果这条边没有被覆盖相当于多增加一个联通块

那么联通块内部肯定要匹配完

Codes

#include<bits/stdc++.h>#define pb push_backusing namespace std;const int N = 5000 + 10;
const int mod = 1e9 + 7;vector<int> G[N];
int f[N][N], g[N], tmp[N];
int n, size[N];void dfs(int u, int dad) {f[u][size[u] = 1] = 1;for(auto v : G[u]) if(v != dad) {dfs(v, u);for(int i = 1; i <= size[u] + size[v]; ++ i) tmp[i] = 0;for(int i = 1; i <= size[u]; ++ i)for(int j = 0; j <= size[v]; ++ j)(tmp[i + j] += 1ll * f[u][i] * f[v][j] % mod) %= mod;for(int i = 1; i <= size[u] + size[v]; ++ i)f[u][i] = tmp[i];size[u] += size[v];}for(int i = 2; i <= size[u]; i += 2)(f[u][0] += mod - 1ll * f[u][i] * g[i] % mod) %= mod;
}int main() {#ifdef ylsakioifreopen("e.in", "r", stdin);freopen("e.out", "w", stdout);
#endifint x, y; g[0] = 1;scanf("%d", &n);for(int i = 2; i <= n; i += 2)g[i] = 1ll * g[i - 2] * (i - 1) % mod;for(int i = 1; i < n; ++ i) {scanf("%d%d", &x, &y);G[x].pb(y), G[y].pb(x);}dfs(1, 0);printf("%d\n", mod - f[1][0]);return 0;
}

ARC101E - Ribbons on Tree 树形DP相关推荐

  1. ARC101E Ribbons on Tree 树形dp 容斥

    题目链接 题意: 给你一棵nnn个点的树,nnn是偶数,把这些点分成n2\frac{n}{2}2n​个点对,每个点对会把路径上的所有边覆盖,问你每条边至少覆盖一次有多少种配对方式.n<=5000 ...

  2. ARC101E Ribbons on Tree 容斥原理+dp

    题目链接 https://atcoder.jp/contests/arc101/tasks/arc101_c 题解 直接容斥.题目要求每一条边都被覆盖,那么我们就容斥至少有几条边没有被覆盖. 那么没有 ...

  3. ARC101E - Ribbons on Tree

    题目链接 ARC101E - Ribbons on Tree 题解 令边集\(S \subseteq E\) 设\(f(S)\)为边集S中没有边被染色的方案数 容斥一下,那么\(ans = \sum_ ...

  4. 2021牛客多校4 - Rebuild Tree(树形dp)

    题目链接:点击查看 题目大意:给出一棵 nnn 个节点的树,现在可以删掉 kkk 条边,然后加上 kkk 条边,问有多少种方案使得操作后 nnn 个点仍然是一棵树 题目分析:原树删掉 kkk 条边后会 ...

  5. hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)

    题目链接: Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: ...

  6. HDU 5834 Magic boy Bi Luo with his excited tree 树形DP

    Magic boy Bi Luo with his excited tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5834 Descript ...

  7. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  8. LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP

    题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...

  9. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

最新文章

  1. Action中取得request,session的四种方式
  2. 将URL中的参数提取出来作为对象
  3. POJ1088 滑雪 记忆化搜索
  4. 水晶报表的显示与打印不一至问题
  5. SSDT Hook的妙用-对抗ring0 inline hook
  6. 一张图get jQuery所有方法
  7. hive 临时表 with_Kettle(PDI)转换中输入表输入详解
  8. java response 输出流_java-springmvc+filter 替换输出流、response、响应内容
  9. 如何用Python破解验证码,适合新手练手
  10. 腾讯上线视频社交App:让你与陌生人美颜视频通话聊天
  11. Windows下使用C++(Win32SDK)编程无需提权读取硬盘序列号
  12. 网站实用性是这样建出来的
  13. 92 Three.js 使用设置bumpMap凹凸贴图创建褶皱
  14. 如何使用ABP开发一
  15. 阿里云python中文社区_python 写中文
  16. Qt浅谈之三十系统托盘(QSystemTrayIcon)
  17. 查看twitter浏览记录_您可以看到谁查看了您的Twitter个人资料吗?
  18. fing网络扫描仪android,Fing网络扫描仪
  19. 关于开源软件License的说明
  20. 【Benewake(北醒) 】长距 TF03 100m/180m介绍以及资料整理

热门文章

  1. java的map是什么_java中的map是什么
  2. . : 无法加载文件 C:\Users\1\Documents\WindowsPowerShell\profile.ps1
  3. htc+m8+wp+android,WP8.1版HTC One M8官方配置全揭晓
  4. 查找字幕资源的网址。射手网
  5. 我的世界服务器唱片修改,我的世界怎么修改音乐 音乐资源包使用教程
  6. SpringCloud系列之六
  7. 做好SEO必备的三步骤
  8. 以前端角度出发做好SEO需要考虑什么?
  9. squirrelmail(小松鼠web邮件系统)
  10. echarts 绘制省份地图 [ 把不同省份的市合并在一起 ]