HDU3311Dig The Wells
给定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个整数,表示使所有机房连上网的费用最小值。
输入输出样例
3 1 3
1 2 3 4
1 4 2
2 4 2
3 4 4
6
4 1 4
5 5 5 5 1
1 5 1
2 5 1
3 5 1
4 5 1
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的更多相关文章
- CSU - 2055 Wells‘s Lottery
Description As is known to all, Wells is impoverished. When God heard that, God decide to help the p ...
- 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 ...
- COJ 2192: Wells弹键盘 (dp)
2192: Wells弹键盘 Description Wells十分羡慕和佩服那些会弹钢琴的人比如子浩君,然而Wells只会弹键盘…… Wells的键盘只有10个键,从1,2,3,……,9,0,如下图 ...
- HDU 3311 Dig The Wells(斯坦纳树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3311 [题意] 给定k座庙,n个其他点,m条边,点权代表挖井费用,边权代表连边费用,问使得k座庙里 ...
- 【HDOJ】3311 Dig The Wells
Steiner Tree.概念就不讲了,引入0号结点.[1, n+m]到0连一条边,权重表示挖井的费用.这样建图spfa求MST即满足所求解. /* 3311 */ #include <iost ...
- HDU.3311.Dig The Wells(DP 斯坦纳树)
题目链接 \(Description\) 有n座庙.一共n+m个点,可以在任意一些点修建水井,不同位置花费不同:也可以某些点之间连无向边共享水.求使n座庙都有水的最小花费. \(Solution\) ...
- 【hdu3311】Dig The Wells(斯坦纳树+dp)
传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都 ...
- HDU - 3311: Dig The Wells (斯坦纳树)
题意:给你n个寺庙,m个村庄,p条路,现在你要在这n+m个位置中选出若干个位置打井,每个位置打井的费用会告诉你,同时p条路也有修建费用,现在每个寺庙都住着一个和尚,问你最小的费用让这n个和尚都能喝上水 ...
- Bootstrap 4-alpha 初体验
What is Bootstrap? 第一句话就是废话了,作为新时代有理想有节操的开发人员无人不知无人不晓.可能就是熟悉程度因为各种原因不尽相同,有人只是知道他大概是个什么东西,有些人可能基本可以使用 ...
随机推荐
- linux,windows,ubuntu下git安装与使用
ubuntu下git安装与使用:首先应该检查本地是否已经安装了git ,如果没有安装的话,在命令模式下输入 sudo apt-get install git 进行安装 输入git命令查看安装状态及常用 ...
- 第六周PTA作业
第一题: #include<stdio.h> int main () { float a,b; scanf("%f %f\n",&a,&b); floa ...
- 关于from nltk.book import * 报错解决方法
import nltk nltk.download() 在使用上面命令安装了nltk库并运行下载后,再输入from nltk.book import * 往往会出现这样的错误提示: 出现这种错误往往是 ...
- Beta项目复审
Beta项目复审 复审人:张宇光 所属团队:MyGod 团队成员:程环宇.王田路.张芷祎.张宇光.王婷婷 团队排名: SW_HW4-team团队 hyw-team团队 Java-Team团队 C++团 ...
- C语言--第七周作业
一.求交错序列前N项和 1.代码 #include <stdio.h> int main() { int i=1,N; double j=0,sum=0; scanf("%d&q ...
- iOS中滤镜种类及相关介绍
- ASP.NET MVC编程——单元测试
1自动化测试基本概念 自动化测试分为:单元测试,集成测试,验收测试. 单元测试 检验被测单元的功能,被测单元一般为低级别的组件,如一个类或类方法. 单元测试要满足四个条件:自治的,可重复的,独立的,快 ...
- Vim 中文社区:期待你的加入
我们的愿景 Vim 中文社区一直比较零散,缺少凝聚力,现有的一些群经常也是水的可以的,讨论各种无关紧要的内容,于是导致很大一部分人,将这些群丢入了群助手,渐渐地他们也淡出了 vim 中文社区. 而我理 ...
- tomcat下的web.xml和项目中的web.xml
Tomcat 服务器中存在一个web.xml文件 在项目文件夹中同样存在一个web.xml文件 那这两个文件有什么区别呢? tomcat中的web.xml是通用的,如果不设置,那么就会默认是同tomc ...
- Collaborative Filtering(协同过滤)算法详解
基本思想 基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分.根据不同用户对相同商品或内容的态度和偏好程度计算用户 ...