思路:DP

提交:\(1\)次(课上刚讲过)

题解:

如果不管重边的话,我们设\(f[i][j]\)表示连了\(i\)条边,\(j\)个点的度数是奇数的方案数,那么显然我们可以分三种状态转移:

\(f[i][j]+=f[i-1][j-2]*C_{n-j+2}^2;\)连了两个偶点

\(f[i][j]+=f[i-1][j]*j*(n-j);\)连了一奇一偶

\(f[i][j]+=f[i-1][j+2]*C_{j+2}^2;\)连了两个奇点

考虑如何处理重边:我们设\(f[i][j]\)表示连了\(i\)条边,\(j\)个点的度数是奇数,并且没有重边方案数,那么除了上面的转移,还要多一个:

\(f[i][j]-=f[i-2][j]*(C_n^2-(i-2))\),含义是任选一条边,假设被连了两次,那就相当于他没有连(不改变奇偶点的数量)。

由于此时的\(DP\)的加边方案是有序的,即我们的 \(DP\) 限制了 \(i\) 这条边的出现,所以在转移完后要对方案数除以 \(i\) 。

#include<cstdio>
#include<iostream>
#define R register int
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0;
register I f=1; register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
} const int N=1010,M=10007;
int n,m,k,tot,Inv[M],c[N],ans;
int f[N][N];
inline int C(int n) {return 1ll*n*(n-1)*Inv[2]%M;}
inline void main() {
g(n),g(m),g(k); Inv[1]=1; for(R i=2;i<=min(k,M-1);++i) Inv[i]=M-M/i*Inv[M%i]%M;
for(R i=1,u,v;i<=m;++i) g(u),g(v),++c[u],++c[v]; for(R i=1;i<=n;++i) tot+=(c[i]&1);
f[0][tot]=1; for(R i=1;i<=k;++i) for(R j=0;j<=n;++j) {
if(j>=2) f[i][j]+=f[i-1][j-2]*C(n-j+2)%M;
f[i][j]+=f[i-1][j]*j%M*(n-j)%M;
f[i][j]+=f[i-1][j+2]*C(j+2)%M;
if(i>=2) f[i][j]+=M-f[i-2][j]*(C(n)-(i-2))%M;
f[i][j]=1ll*f[i][j]*Inv[i%M]%M;
} printf("%d\n",f[k][0]);
}
} signed main() {Luitaryi::main(); return 0;}

2019.08.16

84

最新文章

  1. mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法【mysql低版本数据导入到高版本出错的解决方法】
  2. Bete冲刺第六阶段
  3. 学习使用vim,熟悉Linux
  4. JS分页方法
  5. 10.11 安装pod
  6. 使用SSIS包调度开发的包
  7. 解决linux部署项目后,第一次访问初始化数据源的时候很慢的问题
  8. debug 使用lldb
  9. Java实现批量修改文件名称
  10. 修改datagridview中其中一列的值
  11. Haskell 趣学指南 入门笔记(二)
  12. sublime text 3文件标题无法显示中文的解决办法
  13. RabbitMQ --- Publish/Subscribe(发布/订阅)
  14. 来手撸一个小小小小小&quot;3D引擎&quot;
  15. Linux的打印rpm包的详细信息的shell脚本
  16. Codeforces Round #450 (Div. 2) C. Remove Extra One
  17. 浅拷贝和深拷贝(谈谈java中的clone)
  18. 13: openpyxl 读写 xlsx文件
  19. 指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  20. Linux共享内存使用常见陷阱与分析

热门文章

  1. (八)JSP 技术知识点总结(来自那些年的笔记)
  2. Python之字符与编码笔记
  3. c++学习(三)------static数据与成员函数
  4. 给初学PHP的学习线路和建议
  5. Mac下面配置oh-my-ssh
  6. tfs如何为工作项添加变更集
  7. JVM内存结构划分
  8. 1、java集合:java集合详解及类关系图
  9. POJ1484(Blowing Fuses)--简单模拟
  10. Java 面向对象(四)继承