HDU 4085 Steiner树模板称号

Dig The Wells

Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 971    Accepted Submission(s): 416


Problem Description
You may all know the famous story “Three monks”. Recently they find some places around their temples can been used to dig some wells. It will help them save a lot of time. But to dig the well or build the road to transport the water will cost money. They do not want to cost too much money. Now they want you to find a cheapest plan.

Input
There are several test cases.
Each test case will starts with three numbers n , m, and p in one line, n stands for the number of monks and m stands for the number of places that can been used, p stands for the number of roads between these places. The places the monks stay is signed from 1 to n then the other m places are signed as n + 1 to n + m. (1 <= n <= 5, 0 <= m <= 1000, 0 <=p <= 5000)
Then n + m numbers followed which stands for the value of digging a well in the ith place.
Then p lines followed. Each line will contains three numbers a, b, and c. means build a road between a and b will cost c.

Output
For each case, output the minimum result you can get in one line.

Sample Input
3 1 3 1 2 3 4 1 4 2 2 4 2 3 4 4 4 1 4 5 5 5 5 1 1 5 1 2 5 1 3 5 1 4 5 1

Sample Output
6 5


题意:有n个和尚。每个和尚一个庙,有m个村庄,p条路。每条路有费用,每个地方打井也须要费用,求最少花多少钱能够使得全部和尚喝上水。

斯坦纳树比較裸的问题。

代码:

/* ***********************************************
Author :rabbit
Created Time :2014/7/17 0:59:57
File Name :13.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <string>
#include <time.h>
#include <math.h>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define INF 100000000
#define eps 1e-8
#define pi acosi
typedef long long ll;
int head[1100],tol;
struct Edge{int next,to,val;
}edge[1001000];
void addedge(int u,int v,int w){edge[tol].to=v;edge[tol].next=head[u];edge[tol].val=w;head[u]=tol++;
}
int weight[1100],d[1100][1<<5],dp[1100],in[1010][1<<5];
int main()
{//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);int n,m,p;while(~scanf("%d%d%d",&n,&m,&p)){memset(head,-1,sizeof(head));tol=0;for(int i=0;i<n+m;i++)scanf("%d",&weight[i]);while(p--){int u,v,w;scanf("%d%d%d",&u,&v,&w);u--;v--;addedge(u,v,w);addedge(v,u,w);}for(int i=0;i<n+m;i++)for(int j=0;j<(1<<n);j++)d[i][j]=INF;for(int i=0;i<(1<<n);i++)dp[i]=INF;memset(in,0,sizeof(in));for(int i=0;i<n;i++)d[i][1<<i]=weight[i];for(int i=1;i<(1<<n);i++){queue<int> Q;for(int j=0;j<n+m;j++){for(int k=i&(i-1);k;k=(k-1)&i)d[j][i]=min(d[j][i],d[j][i-k]+d[j][k]-weight[j]);if(d[j][i]<INF)Q.push(100000*j+i),in[j][i]=1;}while(!Q.empty()){int v=Q.front()/100000,t=Q.front()%100000;Q.pop();in[v][t]=0;for(int e=head[v];e!=-1;e=edge[e].next){int s=edge[e].to;if(d[s][t]>d[v][t]+edge[e].val+weight[s]-weight[v]){d[s][t]=d[v][t]+edge[e].val+weight[s]-weight[v];if(!in[s][t]){in[s][t]=1;Q.push(100000*s+t);}}}}}for(int i=1;i<(1<<n);i++)for(int j=0;j<n+m;j++)dp[i]=min(dp[i],d[j][i]);for(int i=1;i<(1<<n);i++){for(int j=i&(i-1);j;j=i&(j-1))dp[i]=min(dp[i],dp[j]+dp[i-j]);}cout<<dp[(1<<n)-1]<<endl;}return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Saga体系结构模式:微服务架构下跨服务事务的实现

在服务端应用程序中&#xff0c;我们往往会通过事务处理来保证数据一致性&#xff08;Data Consistency&#xff09;&#xff0c;例如&#xff1a;当用户从库存中取走了一定数量的物品&#xff0c;这些物品会体现在用户的提货单上&#xff0c;与此同时&#xff0c;库存中物品的…

Css样式基础

1.Css的语法 CSS的语法主要由两个部分组成&#xff0c;一个是选择器&#xff0c;一个是属性、 选择器又分为以下几种&#xff1a; 1.元素选择器&#xff1a;即Html标签去掉括号的就是元素 2.类选择器&#xff1a;所谓的类就是说class“名称”&#xff0c;类的名称是可以相同&am…

Android 清除png图片的白色背景

/**清除背景颜色 * param mBitmap* param mColor 背景颜色值 eg&#xff1a;Color.WHITE** return*/ private static Bitmap getAlphaBitmap(Bitmap mBitmap, int mColor) {Bitmap mAlphaBitmap Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Confi…

【ArcGIS遇上Python】Python使用栅格数据

栅格数据是一个独特的空间数据类型。很多地理处理工具都是为了处理栅格数据而开发的。 1. 列出栅格数据 ListRaster函数是以Python列表的形式返回工作控件中的栅格数据,该函数的语法格式是: ListRaster({wild_card},{raster_type}) 可选参数wild_card通过名称限制返回的结果…

GPhone、OPhone、UPhone、APhone、IPhone:满城尽带XPhone

本文为原创&#xff0c;如需转载&#xff0c;请注明作者和出处&#xff0c;谢谢&#xff01; 最近一段时间智能手机市场是翻天覆地。各大厂商纷纷推出自己的手机操作系统和手机。Google、Apple、中国移动、中国联通纷纷推出或即将推出自已 的智能手机操作系统&#xff08;虽…

C语言试题二十六之请编写一个函数function(char *s),该函数的功反转字符串中的内容。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

二、文章发布页制作及后台实现《iVX低代码/无代码个人博客制作》

注&#xff1a;iVX也有免费直播课《第八期直播课》 一、文章编辑页制作 当首页制作完毕后&#xff0c;需要显示内容就需要有文章数据&#xff0c;此时我们创建一个文章编辑页增加对应的数据。 那么我们创建一个页面&#xff0c;命名为文章发布页&#xff1a; 接着我们查看标…

VS2013配置pro*C/C++开发环境

2019独角兽企业重金招聘Python工程师标准>>> 1、软件&#xff1a;VS2013&#xff0c;oracle10g 2、VS2013 新建VC空项目&#xff0c;然后在源文件中新建一个*.pc文件&#xff08;不知道我的配置哪儿有问题&#xff0c;新建的pc文件必须和工程同名&#xff09;&#…

查看linux版本的三种常用方法

1) 登录到服务器执行 lsb_release -a &#xff0c;即可列出所有版本信息&#xff0c;例如&#xff1a; [root3.5.5Biz-46 ~]# lsb_release -a LSB Version: 1.3 Distributor ID: RedHatEnterpriseAS Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 1) Rel…

Windows 11 23H2 25131 推送!全新搜索体验,优化应用商店

面向 Dev频道的 Windows 预览体验成员&#xff0c;微软现已推送 Windows 11 预览版 Build 25131。主要变化1.微软为 Windows 11 搜索引入全新体验&#xff0c;当您在搜索结果中点击“打开文件位置”时&#xff0c;现在将选择文件资源管理器中的文件&#xff0c;此前只是打开文件…

C# RichTextBox 实现循环查找关键字

实现效果如上图&#xff0c;点击“Search”按钮&#xff0c;开始从文首查找关键字“menu”&#xff0c;并高亮&#xff0c;再次点击“Search”按钮&#xff0c;继续查找下一个。查找到文末&#xff0c;自动从文首重新查找。 private int _searchIndex 0;//查找开始位置/// <…

C语言试题二十七之请编写程序,实现矩阵(3行3列)的转置(即行列互换)。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

网站常见漏洞-- XSS攻击

跨站攻击&#xff0c;即Cross Site Script Execution(通常简写为XSS&#xff0c;因为CSS与层叠样式表同名&#xff0c;故改为XSS) 是指攻击者利用网站程序对用户输入过滤不足&#xff0c;输入可以显示在页面上对其他用户造成影响的HTML代码&#xff0c;从而盗取用户资料、利用用…

【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介

文章目录1. Python简介2. Python的特点3. ArcGIS的脚本语言4. ArcGIS中的Python脚本编辑器1. Python简介 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell)&#xff0c;随着版…

C# RichTextBox 做简单的HTML代码编辑器 ---------左侧显示行号

说明&#xff1a;此显示行号为实际行号&#xff0c;不论是空行还是自动换行&#xff0c;都计算在内&#xff0c;跟实际IDE的行号不同&#xff0c;同步滚动会有半行高度以内的误差。 实现原理&#xff0c;在RichTextBox 编辑器左侧放置另一RichTextBox &#xff08;或其它控件也…

五、文章详情页制作及跳转功能实现《iVX低代码/无代码个人博客制作》

注&#xff1a;iVX也有免费直播课《第八期直播课》 一、详情页制作 在之前的章节中&#xff0c;我们已经制作完毕了登录、注册、首页等内容&#xff0c;在这一节中&#xff0c;我们编写详情页以及详情页功能制作。 详情页页面如下&#xff1a; 详情页头部也就是一个头部栏&…

c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

c 数据类型转换&#xff1a; static_cast dynamic_cast reinterpret_cast const_cast 【版权声明】转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3175217.html【目录】 引言 static_cast 定义 dynamic_cast 定义 举例&#xff1a;下行转换&#xff08;把基类的指针或引用…

C语言试题二十八之编写函数function功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 编写函数f…

日用有余!国产中科方德桌面操作系统初体验

国产IT圈里最受关注的话题&#xff0c;除了芯片想必就是操作系统了。但真说起国产操作系统&#xff0c;大家是既熟悉又陌生&#xff0c;听说过的多而真正使用过的少。而伴随产业发展&#xff0c;市面上也涌现出众多国产操作软件&#xff0c;这些系统是否好用&#xff1f;能否满…

面试经验总结

8 transient是干嘛的 Java的serialization提供了一种持久化对象实例的机制。当持久化对象时&#xff0c;可能有一个特殊的对象数据成员&#xff0c;我们不想用 serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization&#xff0c;可以在这个域前加上关键字…