BZOJ_5180_[Baltic2016]Cities_ 斯坦纳树
BZOJ_5180_[Baltic2016]Cities_ 斯坦纳树
题意:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define N 100050
#define LL long long
priority_queue <pair <LL,int> >q;
int head[N],to[N<<2],nxt[N<<2],cnt;
int n,m,k,id[10],vis[33][N];
LL dis[33][N],val[N<<2];
inline void add(int u,int v,LL w){
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;val[cnt]=w;
}
int main(){
scanf("%d%d%d",&n,&k,&m);
int i,j,mask=(1<<k)-1,p,x,y;
LL z;
memset(dis,0x3f,sizeof(dis));
for(i=1;i<=k;i++) scanf("%d",&id[i]);
for(i=1;i<=k;i++) dis[1<<i-1][id[i]]=0;
for(i=1;i<=m;i++) { scanf("%d%d%lld",&x,&y,&z);add(x,y,z);add(y,x,z); }
for(j=1;j<=mask;j++){
for(i=1;i<=n;i++){
for(p=j&(j-1);p;p=j&(p-1)){
dis[j][i]=min(dis[j][i],dis[p][i]+dis[j-p][i]);
}
}
for(i=1;i<=n;i++){
q.push(make_pair(-dis[j][i],i));
}
while(!q.empty()){
x=q.top().second;q.pop();
if(vis[j][x])continue;
vis[j][x]=1;
for(i=head[x];i;i=nxt[i]){
if(dis[j][to[i]]>dis[j][x]+val[i]){
dis[j][to[i]]=dis[j][x]+val[i];
q.push(make_pair(-dis[j][to[i]],to[i]));
}
}
}
}
LL ans=1ll<<60;
for(i=1;i<=n;i++)ans=min(ans,dis[mask][i]);
printf("%lld\n",ans);
}
BZOJ_5180_[Baltic2016]Cities_ 斯坦纳树的更多相关文章
- [bzoj2595][WC2008]游览计划/[bzoj5180][Baltic2016]Cities_斯坦纳树
游览计划 bzoj-2595 wc-2008 题目大意:题目链接.题目连接. 注释:略. 想法:裸题求斯坦纳树. 斯坦纳树有两种转移方式,设$f[s][i]$表示联通状态为$s$,以$i$为根的最小代 ...
- 【bzoj5180】[Baltic2016]Cities 斯坦纳树
这题一看显然是一个裸的斯坦纳树 我们用$f[i][j]$表示经过的路径中包含了状态$i$所表示的点,且连接了$j$号点的最短路径. 显然,$f[i][j]=min\{f[i$^$k][j]+f[k][ ...
- 初涉斯坦纳树&&bzoj4774: 修路
斯坦纳树的基础应用 斯坦纳树有什么用 个人一点粗浅理解…… 最基本形式的斯坦纳树问题(以下简称母问题):给定图G和一个关键点集V.求在G中选取一个权值最小(这里权值可以有很多变式)的边集E使V中的点两 ...
- BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
斯坦纳树的板子题. 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种. 最小生成树是在给定的点集和边中寻求最短网络使所有点连通. 而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网 ...
- 【BZOJ2595】游览计划(状压DP,斯坦纳树)
题意:见题面(我发现自己真是越来越懒了) 有N*M的矩阵,每个格子有一个值a[i,j] 现要求将其中的K个点(称为关键点)用格子连接起来,取(i,j)的费用就是a[i,j] 求K点全部连通的最小花费以 ...
- HDU 4085 斯坦纳树
题目大意: 给定无向图,让前k个点都能到达后k个点(保护地)中的一个,而且前k个点每个需要占据后k个中的一个,相互不冲突 找到实现这个条件达到的选择边的最小总权值 这里很容易看出,最后选到的边不保证整 ...
- hdu4085 Peach Blossom Spring 斯坦纳树,状态dp
(1)集合中元素表示(1<<i), i从0开始 (2)注意dp[i][ss] = min(dp[i][ss], dp[i][rr | s[i]] + dp[i][(ss ^ rr) | s ...
- hdu 3311 斯坦纳树
思路:虚拟一个0号节点,将每个点建一条到0号节点的边,权值为挖井需要的价值.并要保证0号节点同另外n个寺庙一样被选择即可. 然后就是求斯坦纳树了. #include<map> #inclu ...
- HDU 3311 Dig The Wells(斯坦纳树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3311 [题意] 给定k座庙,n个其他点,m条边,点权代表挖井费用,边权代表连边费用,问使得k座庙里 ...
随机推荐
- 使用jdk8 stream 统计单词数
在我的SpringBoot2.0不容错过的新特性 WebFlux响应式编程里面,有同学问如何使用stream统计单词数.这是个好例子,也很典型,在这里补上. 下面的例子实现了从一个文本文件读取(英文) ...
- 途牛java实习面试(失败)
一进去让自己介绍.简单介绍了一下.然后让我自己说说框架.问题太大一紧张卡住了. 然后面试官开始问,让我介绍多线程,我就简单介绍了多线程.然后问我有没有做过多线程的项目,我说没有. 问了MySQL的锁和 ...
- struts2线程安全
struts2线程安全 2012-02-16 21:07:58 分类: 系统运维 问题:Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.Spring的Ioc容器管理 ...
- Testng基本问题
Testng testng.xml suite属性说明: suite verbose="4" 命令行信息打印等级 1~5 parallel 是否多线程并发运行测试:可选值(fals ...
- 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)
[摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...
- YOLO_Online 将深度学习最火的目标检测做成在线服务实战经验分享
YOLO_Online 将深度学习最火的目标检测做成在线服务 第一次接触 YOLO 这个目标检测项目的时候,我就在想,怎么样能够封装一下让普通人也能够体验深度学习最火的目标检测项目,不需要关注技术细节 ...
- Java基础:Java虚拟机(JVM)
当我们第一次学习Java时这些原理上的东西就会被提到,但是很少有真正去学习.今天开始从头过一遍Java,打算从JVM开始. 1. JVM是什么 2. JRE和JDK 3. JVM结构 3.1. 程序计 ...
- python 编码形式简单入门
为什么使用Python 假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是 ...
- 详解Trie
一.Trie的概念 Trie又称字典树,前缀树(事实上前缀树这个名字就很好的解释了Trie的储存方式) 来一张图理解一下Trie的储存方式:(图片来自百度百科) 由这张图我们也可以知道Trie的特点: ...
- JavaScript里面的循环方法小结
一,原生JavaScript中的循环: for 循环代码块一定的次数,它有三个参数,来决定代码块的循环次数,第一个是初始值,第二个是终止值,第三个参数是变化规则: //for循环 for(var i ...