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

我们先选一个点做根;然后就发现边的权和深度有关;那我们按深度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. Android 工程目录

    app java:我们写Java代码的地方,业务功能都在这里实现 res:存放我们各种资源文件的地方,有图片,字符串,动画,音频等,还有各种形式的XML文件 Gradle Scripts 1.res资 ...

  2. datatable to entiy list 不支持可空类型和枚举类型

    还没有找到解决方法,暂存,希望有知道能告诉我.谢谢.

  3. Oracle_高级功能(9) 性能优化

    1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...

  4. PAT 1076 Wifi密码(15)(代码)

    1076 Wifi密码(15 分) 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B- ...

  5. 796B Find The Bone

    B. Find The Bone time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  6. CSS中(font和background)的简写形式

    转自:http://blog.csdn.net/shenzhennba/article/details/7356095 1.字体属性主要包括下面几个:font-family(字体族): “Arial” ...

  7. 20172306 《Java程序设计》第二周学习总结

    20172306<Java程序设计>第二周学习总结 教材学习内容总结 这一周的学习,我觉得我比上一周认真多了,而且我突然发现慢慢学习的过程中,以前有一些多余自己打出来的东西,有了更清晰的认 ...

  8. compatible with

    和系统函数冲突

  9. HashMap 、HashTable、TreeMap、WeakHashMap的区别是什么

    Java为数据结构中的映射定义了一个接口java.util.Map,它有4个实现类:HashTable.HashMap.TreeMap.WeakHashMap. HashMap和HashTable的区 ...

  10. sqli盲注自用脚本

    盲注脚本 # -*- coding:utf-8 -*- import requests import re url = "http://123.206.87.240:8002/chengji ...