题意:求有多少个边权为$1\cdots\frac{n(n-1)}2$的完全图的最小生成树的边权为$a_{1\cdots n-1}$

啊啊啊我tm真的是什么都不会啊

考虑kruskal的过程:每次选取跨连通块的最小边,考虑设计相应状态的DP

设$f_{V,c,l}$($V$是一个可重集)表示(连通块大小组成可重集为$V$,当前考虑到$c$这条边,有$l$条边满足加入后不改变连通性)的方案数,我们要求的是$f_{\{1,\cdots,1\},1,0}$

从小到大考虑$c$,边界是$c\gt\frac{n(n-1)}2$时$f_{?,c,?}=1$

如果$c$不在$a$中,那么它不能跨块,这条边必须从$l$条边里选,于是$f_{V,c,l}=l\cdot f_{V,c+1,l-1}$

如果$c$在$a$中,那么它要跨块,考虑合并$V$中的两个连通块,枚举$x,y\in V$并将它们合并,设$V'=V-\{x\}-\{y\}+\{x+y\}$,用$xy\cdot f_{V',c+1,l+xy-1}$来转移

实现可以用map<vector,int>并记忆化(话说我今天才知道vector可以比较...)

#include<stdio.h>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef vector<int> vint;
const int mod=1000000007;
int mul(int a,int b){return(ll)a*b%mod;}
int n;
map<vint,int>f[450][450];
bool us[450];
int dfs(vint v,int c,int l){
	if(c>n*(n-1)/2)return 1;
	if(f[c][l].count(v))return f[c][l][v];
	int res=0;
	if(us[c]){
		vint v2;
		int i,j,k;
		for(i=1;i<(int)v.size();i++){
			for(j=0;j<i;j++){
				v2.clear();
				for(k=0;k<(int)v.size();k++){
					if(k!=i&&k!=j)v2.push_back(v[k]);
				}
				v2.push_back(v[i]+v[j]);
				sort(v2.begin(),v2.end());
				(res+=mul(v[i]*v[j],dfs(v2,c+1,l+v[i]*v[j]-1)))%=mod;
			}
		}
	}else if(l)
		res=mul(l,dfs(v,c+1,l-1));
	return f[c][l][v]=res;
}
int main(){
	int i,x;
	scanf("%d",&n);
	for(i=1;i<n;i++){
		scanf("%d",&x);
		us[x]=1;
	}
	printf("%d",dfs(vint(n,1),1,0));
}

最新文章

  1. Html 文档在线编辑器
  2. 萌萌的websocket原理解析
  3. [转]Python 命令行参数和getopt模块详解
  4. (转)springAOP解析-1
  5. linux 任务调度 系统任务调度
  6. 很好的一款思维导图工具XMind使用教程
  7. linux下查看串口信息
  8. poj 2411 状态压缩dp
  9. unity 引入 ios 第三方sdk
  10. iOS Dev (59) 高度自适应的UITextView
  11. 跟我一起读postgresql源码(六)——Executor(查询执行模块之——查询执行策略)
  12. C# 调用.exe文件
  13. Caused by: java.lang.ClassNotFoundException: org.springframework.expression.ExpressionParser
  14. Filter中排除对指定URL的过滤
  15. Dynamics CRM On-Premise V9安装手记
  16. VS 2017显示“高级保存选项”命令操作方法
  17. 使用mutt自动发送邮件
  18. day 53 练习
  19. rsync使用ssh指定端口
  20. A标签实现文件下载功能

热门文章

  1. js获取屏幕高度宽度
  2. bzoj 1483 链表启发式合并
  3. 子DIV块中设置margin-top时影响父DIV块位置的解决办法?
  4. hdu 2962 Trucking (二分+最短路Spfa)
  5. setsockopt 详解
  6. OWASP SSL 高级审查工具
  7. [c++,bson] linux 使用 BSON 编程[www]
  8. Win10打开照片提示“无效的注册表值”解决方法
  9. [How to] 动态布局可变高度的cell的应用
  10. python安装基础