描述
各種資源傳輸網路的功能是將始發地的資源通過網路傳輸到乙個或多個目的地。例如,通過石油或者天然氣輸送管網可以將從油田開採的石油和天然氣傳送給消費者。
同樣,通過高壓傳輸網路可以將發電廠生產的電力傳送給用電消費者。為了使問題更具一般性,用術語訊號統稱網路中傳輸的資源
(石油,天然氣,電力等等
)。各種資源傳輸網路統稱為訊號傳輸網路。訊號經訊號傳輸網路傳輸時,需要消耗一定的能量,並導致傳輸能量的衰減(油壓,氣壓,電壓等等)。當傳輸能量衰減量(壓降)達到某個閾值時,將導致傳輸故障。為
了保證傳輸暢通,必需在傳輸網路的適當位置放置訊號增強裝置,確保傳輸能量的衰減量不超過其衰減量容許值。為了簡化問題,假定給定的訊號傳輸網路是以訊號始發地為根的一棵樹
t。在樹
t的每乙個結點處(除根結點外)可以放置乙個訊號增強裝置。樹
t 的結點也代表傳輸網路的消費結點。訊號經過樹
t 的結點傳輸到其兒子結點。樹的每一邊上的正權是流經該邊的訊號所發生的訊號衰減量。訊號衰減量是可加的。訊號增強裝置問題要求對於乙個給定的訊號傳輸網路,計算如何放置最少的訊號增強裝置來保證網路傳輸的暢通。
對於給定的帶權樹,程式設計計算放置訊號增強裝置最少數量。
輸入
第一行有
1 個正整數
n,表示給定的帶權樹有
n個頂點,編號為1,
2,…,
n。編號為
1 的頂點是樹根。接下來的
n 行中,第
i+1
行描述與
i 個頂點相關聯的邊的資訊。每行的第乙個正整數
k 表示與該頂點相關聯的邊數。其後
2k 個數中,每
2 個數表示
1 條邊。第乙個數是與該頂點相關聯的另乙個頂點的編號,第二個數是邊權值。檔案的最後一行是正整數
d,表示衰減量容許值。
輸出
將程式設計計算出的最小訊號增強裝置數輸出。如果無法得到滿足要求的網路則輸出「
no solution!
」。樣例輸入4
2 2 3 3 1
2 1 3 4 2
1 1 1
1 2 24
樣例輸出1
分析乙個節點(葉子開始)是否要增設訊號增強裝置: 1.
假設該節點所有的兒子都為最優子樹(訊號增強裝置的個數最少)。 2.
比較每個子樹到該節點的訊號衰減量
,取最大值
max
3.s=max+
該節點到父節點的衰減量p
4.比較t與
d : 1.s>d
增設訊號
增強裝置
2.s<=d
不增設(貪心)。 5.
返回該節點衰減量
intfun(
intindex,int
par,int
parc,int
** a,int
n,int
d,int
* result) }
if(max+parc
>d)
else}
分治法解主元素問題
目錄 編寫 實驗資料 資料分析 總結參考資料 分治法的思想是將乙個難以直接解決的大問題劃分成一些規模較小的子問題,分別求解各個子問題,再合併子問題的解得到原問題的解。一般來說,分治法的求解過程由以下二個階段組成 劃分 把規模為 n 的原問題劃分為 k 個規模較小的子問題。求解子問題 各子問題的解法與...
分治法 蠻力法 金塊問題
乙個老闆有 n 塊金塊,他要把最重的一塊獎勵給最優秀的員工,最輕的一塊獎勵給次優秀的員工。假設有一台比較重量的儀器,希望用最少的比較次數找出最重和最輕的金塊。題意就是在一堆亂序元素中找到兩個最值元素 最大值 最小值 本題解法思路有兩種 分治法 蠻力法 分治演算法實現上,又可以分兩種思路 遞迴 非遞迴...
使用分治法解最大連續子串行和問題
俺是菜鳥了解一下,這是我在演算法學習中的一些想法,如果有寫的不好的還請諒解,歡迎學習交流 3 問題 有長度為n的整數序列,求一段連續的子串行,要求該子串行的和為最大,並求出最大值。用分治法解決最大子串行和問題使用的是遞迴,它的思想是 1.將乙個長度為n的序列,一分為二變為兩個長度為n 2的子串行,繼...