假设已经求出了i个点j个桥的连通图数量f[i][j],容易由此推出最终答案,套路地枚举1号点所在连通块大小即可。

  假设已经求出了i个点的边双连通图数量h[i],考虑由此推出f[i][j]。可以枚举其中一座桥将图划分成两个部分,固定1号点在其中一端,将桥两端的部分方案数相乘即可。这样每种方案被考虑的次数就是其中桥的个数,最后再除一下桥个数即可。

  考虑求h[i]。事实上直接将连通图数量减去f[i][1~i-1]即可。连通图计数就是经典题了,套路差不多。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define P 1000000007
#define N 55
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,m,f[N][N],g[N][N],h[N],C[N][N],inv[N],p[N*N],ans;
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
int main()
{freopen("sea.in","r",stdin);freopen("sea.out","w",stdout);n=read(),m=read();C[0][0]=1;for (int i=1;i<=n;i++){C[i][0]=C[i][i]=1;for (int j=1;j<i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;}inv[0]=inv[1]=1;for (int i=2;i<=n;i++) inv[i]=P-1ll*inv[P%i]*(P/i)%P;p[0]=1;for (int i=1;i<=n*n;i++) p[i]=(p[i-1]<<1)%P;h[1]=1;for (int i=2;i<=n;i++){for (int j=1;j<i;j++)inc(h[i],1ll*h[j]*C[i-1][j-1]%P*p[C[i-j][2]]%P);h[i]=(p[C[i][2]]-h[i]+P)%P;}f[1][0]=1;g[1][0]=1;for (int i=2;i<=n;i++){for (int j=1;j<i;j++){for (int x=1;x<i;x++)for (int y=0;y<j;y++)inc(f[i][j],1ll*f[x][y]*f[i-x][j-y-1]%P*x%P*(i-x)%P*C[i-1][x-1]%P);g[i][j]=f[i][j]=1ll*f[i][j]*inv[j]%P;for (int x=1;x<i;x++)for (int y=0;y<=j;y++)inc(g[i][j],1ll*g[i-x][j-y]*f[x][y]%P*C[i-1][x-1]%P);}f[i][0]=h[i];for (int j=1;j<i;j++) inc(f[i][0],P-f[i][j]);g[i][0]=p[C[i][2]];for (int j=1;j<i;j++) inc(g[i][0],P-g[i][j]);}int ans=0;for (int i=0;i<=m;i++) inc(ans,g[n][i]);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/10371858.html

#191 sea(动态规划)相关推荐

  1. POJ 3525/UVA 1396 Most Distant Point from the Sea(二分+半平面交)

    Description The main land of Japan called Honshu is an island surrounded by the sea. In such an isla ...

  2. 算法61---两个字符串的最小ASCII删除和【动态规划】

    一.题目: 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...

  3. LeetCode 583. 两个字符串的删除操作(动态规划)

    1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...

  4. LeetCode简单题目(#172 #189 #190 #191 #198 #202)-6道(序列、数字)

    leetcode题库中共有350道简单题目. 本文记录已解决的题目和代码. 本文中的序号是leetcode题目中的真实序号. 文章目录 172 阶乘后的零 描述 代码 官方解答 189 旋转数组 描述 ...

  5. Leetcode学习之动态规划

    动态规划学习内容 1. 动态规划理论基础 什么是动态规划 动态规划的解题步骤 动态规划应该如何debug 2. 斐波那契数 思路 3. 爬楼梯 思路 4. 使用最小关系爬楼梯 思路 5. 不同路径 思 ...

  6. 破解大厂最难算法面试题:动态规划之股票买卖收益最大化

    最近有个猎头突然给我推荐一份工作,面试流程是先在网上做几道测试题.我突然发现这类网上测试有一个规律,如果面试的是外企那么通常在HakerRank上做题,例如亚马逊,如果面试的是国内企业,例如华为等,通 ...

  7. lintcode 动态规划问题

    前言 第二周我们计划刷动态规划的题目,由于题目较多.我们选取出现频率最高的十道题目. 此次参与刷题的有五人(嘟嘟.琼琼.东东.大智.博主) 正题 94.二叉树中的最大路径和 1.dp[father] ...

  8. 【代码随想录】动态规划刷题

    动态规划 思维导图总结 入门题 斐波那契数 爬楼梯 简单题 使用最小花费爬楼梯 不同路径 不同路径 II 整数拆分 不同的二叉搜索树* 背包问题总结 01 背包* 分隔等和子集 最后一块石头的重量 I ...

  9. 代码随想录python笔记9 动态规划

    理论基础 动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的. 和贪心的区别 所以动态规划中每一个状态一定是由上一个状态推 ...

最新文章

  1. 准备把平台挪到linux
  2. 分布式任务调度平台 XXL-JOB
  3. 学了半天,import 到底在干啥?
  4. ubuntu启动进程笔记
  5. bootstrap 日历中文_bootstrap日期选择器本地化-中文
  6. C# Winform 窗体美化(十、自定义窗体)
  7. 阿里巴巴北京总部鸟瞰图曝光:今天又是想去阿里上班的一天!
  8. DAY09 NETWORK Cisco简单不同网络主机通信
  9. 相关系数excel_excel函数利用CORREL函数FORECAST函数根据现有数据预测未来数据
  10. 几个可以免费下载视频素材的网站[国外],希望大家喜欢[可以的话给个关注哟]
  11. 【FinE】资本市场理论(1) CAPM模型
  12. Windows10 creators update comeing
  13. 阿里 P10 是怎样的存在?
  14. Sping Mvc 学习笔记(一)
  15. 2019最新android实例开发视频教程
  16. 学计算机科学导论到底有什么用,计算机科学导论
  17. 阿里python认证_集成阿里云滑动验证(python)
  18. 【CSS随笔】弹性盒子的flex属性
  19. 【Win10错误】从0x80190001错误码恢复
  20. MS17-010永恒之蓝-漏洞利用+修复方法

热门文章

  1. MVC学习笔记1 MVC概述
  2. 冯诺依曼计算机结构教案,冯诺依曼结构的计算机-同济大学精品课程.PPT
  3. python全栈开发内容_Python全栈开发之Day02
  4. 计算机社团活动丰富多彩,描写社团丰富多彩的句子
  5. linux中samba启动不了,Linux_RHEL5中不用关闭SELinux而成功启动Samba,RHEL5中的samba服务器启动后,能 - phpStudy...
  6. 金蝶云系统显示服务器离线,金蝶云服务器已离线是什么情况
  7. java字符串与数组比较大小_java-如何将存储在数组中的字符串与简单字符串进行比较?...
  8. python学生类出不来中文_Python 这类看起来学习门槛低的语言,是否真的适合入门编程学习?...
  9. 160 - 19 Brad Soblesky.2
  10. scala char_Scala中的Char数据类型