小明的建設方案

2021-09-25 21:04:37 字數 1667 閱讀 3556

 某國有 n座城市,編號從 1 到 n。小明做為該國的道路工程設計師,打算在各個城市之間建設

n−1 條雙向通行的道路,使得任意兩個城市都是可以互相到達的。假設建設每i條道路的成本為

??,第 i條道路的長度為 ???????,道路兩邊連線的城市數分別為 ???? (?) 和 ???? (?) ,則所

有道路的修建總成本 ?為:?? = ??????? ×∣ ???? (?) − ???? (?)∣,

? = ∑?=? ? ?? = ∑?=? ?

??????? ×∣ ???? (?) − ???? (?)∣.

 現在小明設計了乙個建設方案,想請你幫他計算一下,該方案的總成本 c。

 輸入格式:輸入第一行是乙個整數 ?(1 ≤ ? ≤ 1,000,000),表示某國的 n座城市。接下來輸

入 n−1 行,每行輸入三個整數 ?、?、?(1 ≤ ?,? ≤ ?,1 ≤ ? ≤ 1,000,000),表示城市 s 和 t

之間有一條長度為 c 的道路。

 輸出格式:輸出一行,輸出乙個整數,表示道路建設的總成本 c。

 樣例輸入

 5 1 2 2

 2 3 1

 3 4 4

 3 5 5

 樣例輸出

 34

初步分析

題目的意思很簡單就是求總成本c就行了。注意w的值由那幾部分組成,一部分是lengthi。這個好儲存,另一部分就是numai和numbi。如果我們對每條邊都去通過深度或廣度去計算這兩個值(及左端子圖的節點數和右端子圖的節點數)的話。時間複雜度就有o(n^2)資料大的話肯定會卡主的。所以我們把這個圖生成一棵樹。然後用樹形動態規劃去計算numa和numb的值。

解題思路

首先我們用f[i]記錄結點i為根的子樹一共有多少個結點。如果第i條邊連線的子節點是x父親結點是y那麼∣ ???? (?) − ???? (?)∣=abs(n-f[x]-f[x])=abs(n-2*f[x]);那麼fa這個陣列的值怎麼得到呢很簡單。f[i]== ∑? ∈?ℎ????[?]f[j]+1。還需要注意的一點就是我們輸入資料的時候直接輸入的兩個端點。這樣最後生成的只是乙個無向圖,並不是樹。所以還需要我們處理一下,把它變成樹。如果其中乙個的father值不為0,則另乙個點的father值就是它,否則相反。

直接上**

#include #include #include using namespace std;

const int max_n=1000001;

int f[max_n];

int father[max_n];

int n,root=0,ans=0;

struct edgeeid[max_n];

void tree_dp(int node)

}f[node]++;

}int read()

while(isdigit(ch))

return s*w;

}int main()

else

eid[i].lenth=lenth;

}while(father[root])

tree_dp(root);

for(int i=1;i<=n-1;++i)

cout

}

外部鏈結建設方案

1.鏈結 2 2 1的比例覆蓋到首頁,站內重要頁面以及其它頁面 15000條外鏈 一月內完成 相關工具 domain analyzer.jsp 2.站內鏈結 收錄頁面1000 三月內完成 3.交叉鏈結和購買鏈結 交易時保證鏈結的穩定和永續性 4.書籤 無所謂nofollow 保留每個社會書籤 的賬號...

網路實訓室建設方案

隨著資訊科技的迅速發展,網路技術已經滲透到社會生活的各個層面,社會對計算機網路技術人才的需求量與日俱增,因此培養具備網路裝置配置 管理維護 安全管理能力的人才成為計算機專業的一項重要任務。計算機網路是一門與實踐結合緊密的課程,而許多學校由於實驗條件不足,在進行該課程的設定時重理論 輕實踐,造成學生對...

投 資 網 站 建 設 方 案

為保證 的正常執行,使用者資料的高度安全,系統考慮了多種安全策略。如下圖所示。五 建設進度及實施過程 5.1 專案合作與成員 根據本專案的工作內容和範圍,我們將成立乙個6個人左右的專案工作組來負責本專案的開發。具體職責如下 我們方專案主要成員 專案經理 1 人 專案經理負責專案管理 組織 協調,對專...