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

我们先选一个点做根;然后就发现边的权和深度有关;那我们按深度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. mysql 添加外键

    create table class( cid tinyint unsigned primary key auto_increment, caption varchar(15) not null)en ...

  2. docker 运行nginx并进入容器内部、端口映射

    一.docker运行容器 1.从网易蜂巢镜像仓库下载nginx镜像 : 2.拉取镜像到本地,并查看本地的镜像: $ docker pull hub.c..com/library/node:latest ...

  3. 用户态tcp协议栈调研

    一.各种用户态socket的对比 1.MTCP 简单介绍: 韩国高校的一个科研项目,在DPDK的2016年的技术开发者大会上有讲,所以intel将这个也放到了官方上,所以一般搜索DPDK的用户态的协议 ...

  4. 6.26实力测试(小错笑cry)

    6.26测试 本次考试的粗心不忍吐槽(自带贴吧喷水表情),本次考试主要考察的知识点如下: 算法的分析与精简 暴力枚举输出字符 判断与枚举的综合考察 题目 第一题 [问题描述] 在一口井里,有一只神牛( ...

  5. Linux下使用rsync最快速删除海量文件的方法

    常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所以必须要采取一些非常手段.我们可以使用rsync来实现快速删除大量文件. 1.先安装rsync:  yum install rsyn ...

  6. lazarus的动态方法和虚拟方法

    动态方法和虚拟方法在delphi里面分别表示: 动态方法 当需要调用父类.祖先类的被覆盖方法的时候,是查找继承树,当找到,就调用.减少了VMT占用,但调用慢一些. 虚拟方法 和动态方法不同的是,记录了 ...

  7. Eclipse创建Spring项目 未完

    使用的软件及版本 1)Eclipse:Eclipse Java EE IDE for Web Developers :Version: 2018-09 (4.9.0) 2)JDK:java versi ...

  8. java正则表达式(字符串)

    参考:http://blog.csdn.net/kdnuggets/article/details/2526588 补充: ?号的使用: ^/branch/([a-z]+[/]?)$  可以匹配 /b ...

  9. SSH无法连上CentOS7的问题

    今天安装完带GNOME的CentOS后发现XShell无法连接上Linux. 原因是sshd服务没有开启.下面是解决办法: 1 ip addr 发现网卡名称为ens33 2 在/etc/sysconf ...

  10. 模板 Template

    package ${enclosing_package}; import java.io.IOException;import javax.servlet.ServletException;impor ...