给定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. 利用jmeter进行数据库测试

    1.首先,用jmeter进行数据库测试之前,要把oracle和mysql的JDBC驱动jar包放到jmeter安装路径的lib目录下,否则会提示错误 2.添加一个线程组,如下图 3.接下来添加一个JD ...

  2. Rails 定时任务——whenever实现周期性任务

    根据项目的进展,我们需要实现后台进行定时读取信息的功能,而最关键的实现部分是周期性功能,根据调研,决定使用whenever来实现这一功能. github:https://github.com/java ...

  3. 高级软件工程2017第5次作业—— 团队项目:需求改进&系统设计

    Deadline:2017-10-23(周一) 21:00pm 注:以下内容参考 集大作业 1.评分规则: 按时交 - 有分,检查的项目包括后文的四个方面 需求&原型改进 - 20分 系统设计 ...

  4. Beta Scrum Day 5

    听说

  5. alpha-咸鱼冲刺day6-紫仪

    总汇链接 一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 !!!QAQ可以做到跟数据库交互了!!!!先来撒花花!(然后继续甲板) (然后就没有进展了.翻车+1s) 四,问题困难 ...

  6. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  7. 在linux中关闭防火墙

    1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables sta ...

  8. 基于Unity·UGUI实现的RecycleList循环列表UI容器

    在UI功能开发实践中,列表UI容器是我们经常使用一种UI容器组件.这种组件就根据输入的数据集合生成对应数据项目.从显示的方向来说,一般就分为水平排布和垂直排布的列表容器两种.列表容器为了在有限的界面空 ...

  9. Django rest framework源码分析(4)----版本

    版本 新建一个工程Myproject和一个app名为api (1)api/models.py from django.db import models class UserInfo(models.Mo ...

  10. 韩顺平dedecms讲解上课记录

    感谢韩顺平: 如何打开php的gd库,通过php设置->php扩展-->phpdb库;打上勾就行: dede存在四张十分重要的表,channeltype,模型表最原始的发源arctype: ...