\(Sol\)

觉得这里是个很巧妙的地方吖,就是记下当前扩展点集的最大深度,然后强制下一步扩展的点集都是最大深度+1.这样做在当前看可能会导致误算答案导致答案偏大,但是整个\(dp\)完成后一定可以得到最优解.

怎么计算扩展点集的代价呢,显然是要扩展的点向已扩展的点里连最短边,这个可以暴力计算.

注意一个细节就是输入可能有重复的边,取边权最小的即可.图论题都要注意这一点!

\(Code\)

#include<bits/stdc++.h>
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i<=b;++i)
#define yes(i,a,b) for(Ri i=a;i>=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define int long long
#define db double
#define inf 2147400000
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*y;
}
const int N=13,M=1005;
int n,m,S,as,dis[N][N],a[1<<N],f[N][1<<N];
il int lowbit(Ri x){return x&(-x);}
il int cal(Ri i,Ri j)
{
Ri ret=0,i1,j1,tmp=j,cur;
while(i)
{
i1=lowbit(i),j=tmp,cur=inf;i^=i1;
while(j)j1=lowbit(j),j^=j1,cur=min(cur,dis[a[i1]][a[j1]]);
ret+=cur;
}
return ret;
}
signed main()
{
n=read(),m=read(),S=(1<<n)-1;
mem(dis,127);mem(f,127);
go(i,0,n-1)f[1][1<<i]=0,a[1<<i]=i;
go(i,1,m){Ri u=read()-1,v=read()-1;dis[u][v]=dis[v][u]=min(dis[u][v],read());}
go(i,1,S)
{
Ri j=(i-1)&i;
while(j)
{
Ri k=i^j,sum=cal(k,j);
go(dep,2,n)f[dep][i]=min(f[dep][i],f[dep-1][j]+sum*(dep-1));
j=(j-1)&i;
}
}
as=f[1][S];go(i,2,n)as=min(as,f[i][S]);
printf("%lld\n",as);
return 0;
}

随机推荐

  1. jqLite

    一.关于DOM导航的jqLite方法 children() 返回一组子元素.这个方法的jqLite实现不支持jQuery所提供的选择器特性 eq(index) 从一个元素集合中返回指定索引下的元素 f ...

  2. 给radio添加点击事件

    1.单独给每个radio添加点击事件 <fieldset id="form-gra-time"> <legend>请选择日期粒度:</legend&g ...

  3. gradle在build的时候找不到某个jar包的解决办法

    前几天公司来新人, 我给他装项目环境的时候遇到一个问题, 在执行gradle build时遇到一系列的错误, 我一个个分析并解决了, 特此记录, 以供他人参考. 一, 首先遇到了找不到spring-b ...

  4. 移动端Chrome Inspect调试 (Android通过Chrome Inspect调试WebView的H5)(ios手机safari,chrome调试 windows)(如果inspect的时候,是空白)

    ios +chrome调试 引用https://segmentfault.com/a/1190000015428430 iTunes ios-webkit-debug-proxy-1.8-win64- ...

  5. Xshell如何修改字体大小和颜色

    https://jingyan.baidu.com/article/db55b609aac41e4ba30a2f86.html 打开Xshell,点击菜单栏的“文件”->“属性”,或者也可以使用 ...

  6. Xshell + SVN使用

    切换目录 cd+想跳转到的目录下 文件浏览 ls ll (ll 信息全) svn更新 svn up 编辑 vi vi的命令 文件保存与退出: :q 在文件未作任何修改的情况下退出. :q! 强制退出, ...

  7. 【js】Vue 2.5.1 源码学习 (八)响应式入口observe

    大体思路(七) 本节内容: deps 依赖收集的数组对象 => Dep 构造函数 /** ==> observe() * var ob * ==> if --isObject * = ...

  8. linux /proc 接口和共享中断

    在系统中安装共享处理者不影响 /proc/stat, 它甚至不知道处理者. 但是, /proc/interrupts 稍稍变化. 所有同一个中断号的安装的处理者出现在 /proc/interrupts ...

  9. vue-learning:1 - 为什么选择vue

    为什么选择Vue 通过一个对比,展示vue框架的优势: 需求:根据请求后端接口返回的数据列表,渲染在页面中. 传统上我们使用jQuery的Ajax发送http请求,获取数据.判断列表数据是否存在,如果 ...

  10. 2019-9-24-dotnet-remoting-抛出异常

    title author date CreateTime categories dotnet remoting 抛出异常 lindexi 2019-09-24 15:39:50 +0800 2018- ...