前言必讀!
問題 o: 自來水管道
時間限制: 1 sec 記憶體限制: 128 mb
提交: 190 解決: 64
[提交][狀態][討論版]
題目描述
你領到了乙個鋪設校園內自來水管道的任務。校園內有若干需要供水的點,每兩個供水點可能存在多種鋪設路徑。對於每一種鋪設路徑,其成本是預知的。
任務要求最終鋪設的管道保證任意兩點可以直接或間接的聯通,同時總成本最低。
輸入每個測試用例由多行組成,第一行是兩個整數p和r,p代表供水點數(1<=p<=50),每個點都對應1到p中的乙個唯一編號。r代表可能的鋪設路徑數,路徑數可能有非常多。接下有r行,每行格式如下:
節點a編號 節點b編號 路徑成本
路徑成本不超過100。
測試用例之間有一空行分開。輸入結束用p=0表示,注意沒有r值。
輸出 每個測試用例占用一行輸出最低總成本。
樣例輸入
1 02 3
1 2 37
2 1 17
1 2 68
3 71 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32
5 71 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12
0樣例輸出017
1626
提示[提交][狀態][討論版]
純粹的prim水題,沒什麼好說的
給出prim偽**
1).輸入:乙個加權連通圖,其中頂點集合為v,邊集合為e;
2).初始化:vnew = ,其中x為集合v中的任一節點(起始點),enew = {},為空;
3).重複下列操作,直到vnew = v:
a.在集合e中選取權值最小的邊,其中u為集合vnew中的元素,而v不在vnew集合當中,並且v∈v(如果存在有多條滿足前述條件即具有相同權值的邊,則可任意選取其中之一);
b.將v加入集合vnew中,將邊加入集合enew中;
4).輸出:使用集合vnew和enew來描述所得到的最小生成樹。
c++:實現
#include
using
namespace
std;
#define inf -1
#define maxn 100
#define protect 2
int point[protect*maxn][protect*maxn]; //a->b 值為cost
int mine[protect*maxn]; //當前到點 i 最短路
bool visit[protect*maxn]; //prim 是否訪問過
bool judge[protect*maxn][protect*maxn]; //handle是否已經有邊
void print_mat(int n)
void handle(int v,int e)
if(judge[b][a]) point[b][a] = min(point[b][a],cost);
else
}//讀取並保證最小邊
}}int search(int now,int & cost,int n)
}visit[next]=true;mine[next]=0;
cost += min_next+1>0?min_next:0;
return next;
}//返回下乙個最小的鄰接點
int prim(int n)
int main(void)
}
自來水管道
思路 主要是普里姆演算法,搜尋找到頂點的最小權值,然後加到裡面。include include include include using namespace std int mini 51 int a 51 51 int vis 51 int main vis 1 1 int ans 0 for ...
常見自來水水表型別大全
常見自來水水表型別大全 微水平臺 2018 12 14 自1825年英國的克路斯發明平衡罐式水表以來,水表的發展已有近200年歷史。今天水務加就同你一起看看我們自來水都用到哪些型別的水表。水表發展簡史 從1825年英國的克路斯發明了真正具有儀表特徵的平衡罐式水表以來,水表的發展已有近二百年的歷史。中...
當自來水排程用上大資料分析
自來水公司工作人員正在排程中心檢視排程情況 今年入夏以來,武廣 慄雨等區域的供水不足情況得到了明顯改善。21日,在株洲市自來水公司供水排程中心,排程員張云指著排程中心大螢幕上的相關資料向記者介紹。過去,武廣 慄雨等新開發城區因處在管網末梢,經常會出現水壓不足。今年,市自來水公司的標準化排程運營庫建設...