给定N个寺庙,和M个另外的地方。

然后给定点权,表示在这个点挖水井需要的代价。

再给定边权,为建造无向边i,j的代价。

然后求怎样弄最小的代价使得前N个点,就是寺庙都能从挖的井里得到水。

输入输出格式

输入格式:

第1行:三个整数N,M,Q(Q的含义下面有解释)

第2行:共N+M个整数,第i个数表示在编号为i的地方安装适配器费用Ai

第3~Q+2行:每行三个整数U,V,C,表示编号为U,V间连接网线的费用为C

输出格式:

共1行,1个整数,表示使所有机房连上网的费用最小值。

输入输出样例

输入样例#1:

3 1 3
1 2 3 4
1 4 2
2 4 2
3 4 4
输出样例#1:

6
输入样例#2:

4 1 4
5 5 5 5 1
1 5 1
2 5 1
3 5 1
4 5 1
输出样例#2:

5

说明

样例解释:

对于样例1:直接在每个机房安装适配器,开销最小,为1+2+3=6。

对于样例2:在唯一一个非机房的教室安装适配器,并从此处接网线到各个机房,开销最小,为1+1+1+1+1=5。

数据规模:

20%的数据有N=1;

另20%的数据有N=2;

另20%的数据有N=3;

100%的数据有1<=N<=5,1<=M<=1000,M<=Q<=5000,1<=A,C<=10000。

斯坦纳树的应用:

与模板相比,多了点权的设定,即一个联通块要有一个点权

方法很简单,设一个0节点,i点权值为x则加边(0,i,x),求部分点最小生成树(斯坦纳树)

斯坦纳树的概念和实现方法:http://blog.csdn.net/gzh1992n/article/details/9119543

注意此代码没有考虑多组数据

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct Node
{
int next,to,dis;
}edge[];
int q[],num,head[],dist[][],n,m,qq,f[(<<)][];
bool vis[];
void add(int u,int v,int dis)
{
num++;
edge[num].next=head[u];
head[u]=num;
edge[num].to=v;
edge[num].dis=dis;
}
void bfs(int x)
{int h,t,i;
q[]=x;
h=;t=;
dist[x][x]=;
memset(vis,,sizeof(vis));
while (h<t)
{
h++;
int u=q[h];
vis[u]=;
for (i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if (dist[x][v]>dist[x][u]+edge[i].dis)
{
dist[x][v]=dist[x][u]+edge[i].dis;
if (vis[v]==)
{
t++;
q[t]=v;
vis[v]=;
}
}
}
}
}
int main()
{int i,j,x,u,v,c,l;
cin>>n>>m>>qq;
memset(dist,/,sizeof(dist));
for (i=;i<=n+m;i++)
{
scanf("%d",&x);
add(,i,x);add(i,,x);
}
for (i=;i<=qq;i++)
{
scanf("%d%d%d",&u,&v,&c);
add(u,v,c);add(v,u,c);
}
for (i=;i<=n+m;i++)
bfs(i);
memset(f,/,sizeof(f));
for (i=;i<=n;i++)
{
for (j=;j<=n+m;j++)
{
f[<<i][j]=dist[i][j];
}
}
for (i=;i<=n+m;i++)
{
f[][i]=;
}
for (int sta=;sta<(<<(n+));sta++) if (sta&(sta-))
{
for (int i=;i<=n+m;i++)
for (int sub=sta;sub;sub=(sub-)&sta)
if (f[sta][i]>f[sub][i]+f[sta^sub][i])
f[sta][i]=f[sub][i]+f[sta^sub][i];
for (int i=;i<=n+m;i++)
for (int j=;j<=n+m;j++)
if (f[sta][i]>f[sta][j]+dist[j][i])
f[sta][i]=f[sta][j]+dist[j][i];
}
cout<<f[(<<n+)-][];
}

HDU3311Dig The Wells的更多相关文章

  1. CSU - 2055 Wells‘s Lottery

    Description As is known to all, Wells is impoverished. When God heard that, God decide to help the p ...

  2. Bootstrap 3之美06-Page Header、Breadcrumbs、Dropdowns、Button Dropdowns、用Button和Dropdowns模拟Select、Input Groups、Thumbnails、Panels、Wells

    本篇主要包括: ■  Page Header■  Breadcrumbs■  Button Groups■  Dropdowns■  Button Dropdowns■  用Button和Dropdo ...

  3. COJ 2192: Wells弹键盘 (dp)

    2192: Wells弹键盘 Description Wells十分羡慕和佩服那些会弹钢琴的人比如子浩君,然而Wells只会弹键盘…… Wells的键盘只有10个键,从1,2,3,……,9,0,如下图 ...

  4. HDU 3311 Dig The Wells(斯坦纳树)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3311 [题意] 给定k座庙,n个其他点,m条边,点权代表挖井费用,边权代表连边费用,问使得k座庙里 ...

  5. 【HDOJ】3311 Dig The Wells

    Steiner Tree.概念就不讲了,引入0号结点.[1, n+m]到0连一条边,权重表示挖井的费用.这样建图spfa求MST即满足所求解. /* 3311 */ #include <iost ...

  6. HDU.3311.Dig The Wells(DP 斯坦纳树)

    题目链接 \(Description\) 有n座庙.一共n+m个点,可以在任意一些点修建水井,不同位置花费不同:也可以某些点之间连无向边共享水.求使n座庙都有水的最小花费. \(Solution\) ...

  7. 【hdu3311】Dig The Wells(斯坦纳树+dp)

    传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都 ...

  8. HDU - 3311: Dig The Wells (斯坦纳树)

    题意:给你n个寺庙,m个村庄,p条路,现在你要在这n+m个位置中选出若干个位置打井,每个位置打井的费用会告诉你,同时p条路也有修建费用,现在每个寺庙都住着一个和尚,问你最小的费用让这n个和尚都能喝上水 ...

  9. Bootstrap 4-alpha 初体验

    What is Bootstrap? 第一句话就是废话了,作为新时代有理想有节操的开发人员无人不知无人不晓.可能就是熟悉程度因为各种原因不尽相同,有人只是知道他大概是个什么东西,有些人可能基本可以使用 ...

随机推荐

  1. Beta冲刺第二天

    一.昨天的困难 没困难 二.今天进度 局部测试并修复出现的bug 1.林洋洋:修复登录页面显示问题,修复日程查询问题 2.黄腾达:修复创建协作开始时间和结束时间没做检验的问题 3.张合胜:修复页面内容 ...

  2. 第14、15週PTA題目的處理

    題目1 選擇法排序 1.實驗代碼 #include <stdio.h> #include <stdlib.h> int main() { int n,index,exchang ...

  3. mongodb 数据备份与恢复

    备份 语法 mongodump -h dbhost -d dbname -o dbdirectory -h:服务器地址,也可以指定端口号 -d:需要备份的数据库名称 -o:备份的数据存放位置,此目录中 ...

  4. 《javascript设计模式与开发实践》阅读笔记(16)—— 状态模式

    状态模式 会区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变.比如电灯的开关是开还是关,在外界的表现就完全不同. 电灯例子 按照常规思路,实现一个电灯就是构造一个电灯类,然后指定一下它的 ...

  5. JavaScript Cookie使用实例

    # Session-Cookie //  利用Cookie防止在1分钟内多次提交: function SetCookie (name, value) { var Days = 30; var exp ...

  6. Win7下安装composer, 并使用其安装smarty

    安装composer需要开启PHP openssl扩展. 1) 先查看PHP是否开启了openssl扩展 键盘win+r 输出cmd, 可以看到Dos窗口, 然后执行php -m (需要添加PHP环境 ...

  7. idea 找不到classpath 为resource下的xml

    注入时不能自动找到在src/main/resources下的xml. @ContextConfiguration(locations = { "classpath:applicationCo ...

  8. 老帖收藏,留供参考:SpringMvc2.5+Mybatis3.2.7

    一.项目背景 SpringMvc+Mybatis 数据库连接池是阿里巴巴的druid.日志框架式logback 二.配置文件 1.SpringMvc-servlet.xml <?xml vers ...

  9. 阿里云API网关(3)快速入门(调用 API)

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  10. Archaius 原理

    Archaius 原理 Archaius是什么? Archaius提供了动态修改配置的值的功能,在修改配置后,不需要重启应用服务.其核心思想就是轮询配置源,每一次迭代,检测配置是否更改,有更改重新更新 ...