看数据范围想到状压,我们知道最后是选出一颗生成树,但边权的计算有一些有趣;

我们先选一个点做根;然后就发现边的权和深度有关;那我们按深度dp;即按层dp;

dp[i][s]表示前i层选的点集为s,转移时我们枚举s的补集的子集ss;对于ss中的每个点,

我们连上他到s中点的最小边;但这样连的边没办法保证深度为i+1,但我们就强制把他设成i+1;

这样感觉很错,但其实是对的,因为这样只会使答案变大,而且还可以保证真正的答案被枚举到;

相当于是一种对限制的扩大。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
typedef long long ll;
const ll inf=1e16;
ll map[][],dis[][(<<)+];
ll dp[][(<<)+],z;
int n,m,x,y;
int main(){
cin>>n>>m;
if(!m){puts("");return ;}
for(int i=;i<=;++i)
for(int j=;j<=;++j)map[i][j]=inf;
for(int i=;i<=;++i)
for(int j=;j<=(<<);++j)dis[i][j]=inf;
for(int i=;i<=;++i)
for(int j=;j<=(<<);++j)dp[i][j]=inf;
for(int i=;i<=m;++i){
scanf("%d%d%d",&x,&y,&z);
map[x][y]=map[y][x]=min(map[x][y],z);
}
int sta=(<<n)-;
for(int s=;s<=sta;++s){
for(int i=;i<=n;++i){
if((<<(i-))&s)continue;
for(int j=;j<=n;++j){
if((<<(j-))&s)dis[i][s]=min(dis[i][s],map[i][j]);
}
}
}
for(int i=;i<=n;++i)dp[][<<(i-)]=;
for(int s=;s<=sta;++s){
int st=sta-s;
for(int ss=st;ss;ss=(ss-)&st){
ll res=;
for(int i=;i<=n;++i){
if((<<(i-))&ss)res+=dis[i][s];
}
for(ll i=;i<n;++i){
dp[i+][ss|s]=min(dp[i+][ss|s],dp[i][s]+res*i);
}
}
}
ll ans=inf;
for(int i=;i<=n;++i)ans=min(ans,dp[i][sta]);
cout<<ans;
return ;
}

noip2017d2t2的更多相关文章

  1. NOIp2017D2T2(luogu3959) 宝藏 (状压dp)

    时隔多年终于把这道题锅过了 数据范围显然用搜索剪枝状压dp. 可以记还有哪些点没到(或者已到了哪些点).我们最深已到的是哪些点.这些点的深度是多少,然后一层一层地往下推. 但其实是没必要记最深的那一层 ...

  2. 【状压DP】【P3959】【NOIP2017D2T2】宝藏

    Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 $n$ 个深埋在地下的宝藏屋, 也给出了这 $n$ 个宝藏屋之间可供开发的$ m$ 条道路和它们的长度. 小明决心亲自前往挖 ...

随机推荐

  1. Vs2013 如何使用EF6来连接mysql数据库

    参考文章: 1.http://www.dotblogs.com.tw/yc421206/archive/2014/03/14/144395.aspx 参考了1,在VS中算是已经配置好了,在添加数据实体 ...

  2. u-boot之怎么实现分区

    启动参数bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0中kernel在哪定义,为什么可以直接引用?针对这个问题展开思考最终定位到 ...

  3. c#一个统计运行时间方法

    public string STD(int HowManySecond) { ) { "; } string ShowStr = ""; * )) { ShowStr + ...

  4. 线性表(java)

    线性表 概念:零个或者多个数据元素的有限序列. 特点:除了第一个元素没有前驱结点,最后一个元素没有后继结点外,其它元素有且仅有一个直接前驱和一个直接后继结点.元素的个数必定为有限个. 实现: 定义一个 ...

  5. Codeforces 545E. Paths and Trees 最短路

    E. Paths and Trees time limit per test: 3 seconds memory limit per test: 256 megabytes input: standa ...

  6. python 正则表达式 group() groups()

    参考地址: http://www.cnblogs.com/kaituorensheng/archive/2012/08/20/2648209.html

  7. python_docx制作word文档详细使用说明【转】

      目前网上对这一个库的介绍得很少,很零散,所以很多功能我是尽量参考其官网,但是官网上面很多功能目前只有说明文档,而代码并还没有及时更新,以至于按照官网上面做了,python却报错.比如:自定义表格的 ...

  8. Tomcat配置Solr4.8

    简介:Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http G ...

  9. create a plugin for PowerShell ISE

    可参考:Creating Add-ons, Plugins, and Tools for the PowerShell ISE http://www.leeholmes.com/blog/2013/0 ...

  10. 【Web】Nginx配置开机启动

    在添加nginx服务之后,大家会希望开机伴随启动nginx,避免手动路径输入启动: nginx官方提供了启动脚本:https://www.nginx.com/resources/wiki/start/ ...