一个有权的无向图上有k个关键点,求联通k个关键点最小的代价。
答案的子图一定是树。

时间复杂度:O(n×3k+mlog⁡m×2k)O(n\times 3^k+m\log m\times 2^k)O(n×3k+mlogm×2k)

#include <bits/stdc++.h>
using namespace std;
const int MAXN=510;
int n,m,k,x,y,z,eg,p[MAXN],hd[MAXN],ver[2*MAXN],vis[MAXN],nx[2*MAXN],edge[2*MAXN],dp[MAXN][4200];
priority_queue < pair<int,int> > q;
void add_edge (int x,int y,int z) {ver[++eg]=y;nx[eg]=hd[x],edge[eg]=z;hd[x]=eg;return;
}
void dijkstra (int s) {memset(vis,0,sizeof(vis));while (!q.empty()) {pair <int,int> a=q.top();q.pop();if (vis[a.second]) {continue;}vis[a.second]=1;for (int i=hd[a.second];i;i=nx[i]) {if (dp[ver[i]][s]>dp[a.second][s]+edge[i]) {dp[ver[i]][s]=dp[a.second][s]+edge[i];q.push(make_pair(-dp[ver[i]][s],ver[i]));}}}return;
}
int main () {freopen("st010.in","r",stdin);freopen("st010.out","w",stdout);memset(dp,0x3f,sizeof(dp));scanf("%d%d%d",&n,&m,&k);for (int i=1;i<=m;i++) {scanf("%d%d%d",&x,&y,&z);add_edge(x,y,z),add_edge(y,x,z);}for (int i=1;i<=k;i++) {scanf("%d",&p[i]);dp[p[i]][1<<(i-1)]=0;}for (int s=1;s<(1<<k);s++) {for (int i=1;i<=n;i++) {for (int subs=s&(s-1);subs;subs=s&(subs-1)) {dp[i][s]=min(dp[i][s],dp[i][subs]+dp[i][s^subs]);}if (dp[i][s]!=0x3f3f3f3f) {q.push(make_pair(-dp[i][s],i));}}dijkstra(s);}printf("%d\n",dp[p[1]][(1<<k)-1]);return 0;
}

模板 - 最小斯坦纳树相关推荐

  1. hdu3311 Dig The Wells(斯坦纳树模板题)

    题目 n(1<=n<=5)个和尚,每个和尚位于一个寺庙内,标号1-n m(0<=m<=1e3)个其他地方,标号n+1到n+m 以下n+m个数,为在第i个地方打井所需的代价 以下 ...

  2. [学习笔记]斯坦纳树

    处理一种这样的问题: 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网络 ...

  3. 【算法竞赛学习笔记】超好懂的斯坦纳树详解!!!

    title : 斯坦纳树 tags : ACM 图论 date : 2021-6-26 author : Linno 什么是斯坦纳树 给定 n 个点 A1,A2,⋯,An试求连接此n个点,总长最短的直 ...

  4. BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)

    题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4006 (luogu)https://www.luogu.org/probl ...

  5. 业界萌新对斯坦纳树的小结

    业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使 ...

  6. hdu6060斯坦纳树

    hdu6060 题意:给出一颗n个节点的树,要求将2-n号节点分成k部分,然后再将每一部分加上1号节点联通的最小花费,定义为每一部分的val,为其在原图上的最小斯坦纳树,问总的val最大可能是多少. ...

  7. 2019 ICPC 南昌邀请赛 A-Attack(斯坦纳树)

    题意:给出一个无向图,和四对数据.每对数据分别为图中的两个点.要求添加一些边,使每对点都能连通,让总边权最小. 分析:POJ3123.NWERC2006原题,<acm国际大学生程序设计竞赛:题目 ...

  8. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp

    给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...

  9. [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp

    管道连接 bzoj-4006 JLOI-2015 题目大意:给定一张$n$个节点$m$条边的带边权无向图.并且给定$p$个重要节点,每个重要节点都有一个颜色.求一个边权和最小的边集使得颜色相同的重要节 ...

最新文章

  1. java课堂测试样卷-----简易学籍管理系统
  2. 建军92周年,让我们了解那些先进的军用机器人
  3. 读《大话设计模式》有感
  4. iOS之常用的正则表达式
  5. 26Exchange Server 2010跨站点部署-内外网邮件流测试
  6. crond定时任务详细分析
  7. [vue] 如果现在让你从vue/react/angularjs三个中选择一个,你会选哪个?说说你的理由
  8. java新手笔记16 面积
  9. 让vue文件直接在浏览器中运行
  10. 按下什么使物体复位_什么是继电器?继电器如何接线?
  11. redux之createStore
  12. Camera 初始化(Preview) 一(Framework-HAL3)
  13. 苹果待处理订单要多久_一个订单管理系统帮你轻松应对复杂的生产订单管理
  14. 【Python量化】风险平价策略
  15. 简单工厂模式、工厂方法模式与抽象工厂模式
  16. 大学——留德的路01
  17. 180522 安卓-DDCTF2018(RSA)
  18. 在win10中安装并配置多个JDK不同的版本
  19. Vue 判断页面内图片是否渲染完成
  20. 输入【ionic start myApp tabs】命令创建项目时失败

热门文章

  1. 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
  2. 干货 | 基于特征的图像配准用于缺陷检测
  3. 最大流学习笔记(1)
  4. 无线路由器结合Windows Radius Server实现通过域账户连接公司无线网络
  5. 【转】给博客园博文标题加个漂亮的背景色
  6. C语言配置文件解析库——iniparser
  7. python web项目案例教程_Python Web开发案例教程(慕课版)——使用Flask、Tornado、Django...
  8. markdown 图片居中_Markdown更改字体、颜色、大小,插入表格等方法
  9. eclipse新建python文件夹_eclipse 如何创建python文件
  10. vb error bc30469: 对非共享成员的引用要求对象引用_提问||准备好面向你的对象了吗?...