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.pswp.cn/news/286270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286270.shtml
英文地址,請注明出處:http://en.pswp.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;可以在這個域前加上關鍵字…