某國有 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 人 專案經理負責專案管理 組織 協調,對專...