https://www.luogu.org/problemnew/show/P3959

注意到n非常小,考虑状压/搜索。

发现状压需要枚举起点,跑n次,一个问题是转移不可以以数字大小为阶段了,考虑用dfs的方式递推。

一开始的naive想法是,跑2^n次Floyd,处理出每种联通情况下到根的最少经过点数,然后由N-1状态开始倒着记忆化搜索,出了很多锅,细节也不少。

考虑正着做,即刷表,发现很好写!也不必跑Floyd了,用dis数组一边跑一边更新最短距离就行。

f[S]表示联通情况为s时的最小代价,转移时枚举一个集合内的点,由它向外枚举一个点转移。

#include<iostream>
#include<cstdio> using namespace std; inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} const int MAXN=;
const int INF=<<; int n,m,N; int a[MAXN][MAXN];
int f[<<MAXN],dis[<<MAXN]; void dp(int s){
for(int i=;i<=n;i++){
if(!(s&(<<(i-)))) continue;
for(int j=;j<=n;j++){
if(s&(<<(j-))) continue;
if(a[i][j]==INF) continue;
if(f[s|(<<(j-))]>f[s]+(dis[i]+)*a[i][j]){
int sav=dis[j];
dis[j]=dis[i]+;
f[s|(<<(j-))]=f[s]+(dis[i]+)*a[i][j];
dp(s|(<<(j-)));
dis[j]--;
}
}
}
} int main(){
n=rd();m=rd();N=<<n;
int x,y,w;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
a[i][j]=INF;
for(int i=;i<=m;i++){
x=rd();y=rd();w=rd();
a[y][x]=a[x][y]=min(a[x][y],w);
}
int ans=INF;
for(int i=;i<=n;i++){
for(int j=;j<N;j++) f[j]=INF;
for(int j=;j<=n;j++) dis[j]=INF;
f[]=;f[<<(i-)]=;dis[i]=;
dp(<<(i-));
ans=min(ans,f[N-]);
}
cout<<ans;
return ;
}

最新文章

  1. extjs之apply
  2. java mail发送邮件
  3. nyoj 120 校园网络
  4. [英语学习]国外的在线广播网站,类似喜马拉雅和荔枝FM
  5. BZOJ1593 [Usaco2008 Feb]Hotel 旅馆
  6. Android 悬浮窗 WindowManager WindowManager.LayoutParamas
  7. hdu 1796 How many integers can you find
  8. MVC中HttpContext, HttpContextBase, HttpContextWrapper联系
  9. Android--获取当前系统的语言环境
  10. Sqlserver统计语句
  11. python中判断readline读到文件末尾
  12. 展开被 SpringBoot 玩的日子 《 一 》入门篇
  13. Django之django模型层二多表操作
  14. AD7729_双通道Sigma-Delta ADC
  15. .NET并行计算和并发4-Thread-Relative Static Fields and Data Slots
  16. [leetcode]42. Trapping Rain Water雨水积水问题
  17. Openlayer3之瓦片数据接入
  18. VM虚拟机如何和主机共享文件夹或文件
  19. 170530、java 迭代hashmap常用的三种方法
  20. CMDB概述(一)

热门文章

  1. mysql--浅谈查询1
  2. 在linux下pycharm无法输入中文
  3. POJ-1181-食物链
  4. bzoj3583 杰杰的女性朋友 || bzoj4362 Graph
  5. python_16(bootstrap)
  6. [转](不理想)Ubuntu下更改主显示器
  7. Tame Your Software Dependencies for More Flexible Apps
  8. Android 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
  9. viewpager的使用-新方法 5.1
  10. Yslow使用方法