description
參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n 個深埋在地下的寶藏屋,也給出了這 n 個寶藏屋之間可供開發的 m 條道路和它們的長度。
小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發寶藏屋之間的道路則相對容易很多。
小明的決心感動了考古挖掘的贊助商,贊助商決定免費贊助他打通一條從地面到某個寶藏屋的通道,通往哪個寶藏屋則由小明來決定。
在此基礎上,小明還需要考慮如何開鑿寶藏屋之間的道路。已經開鑿出的道路可以任意通行不消耗代價。每開鑿出一條新道路,小明就會與考古隊一起挖掘出由該條道路所能到達的寶藏屋的寶藏。另外,小明不想開發無用道路,即兩個已經被挖掘過的寶藏屋之間的道路無需再開發。
新開發一條道路的代價是:
這條道路的長度 × 從贊助商幫你打通的寶藏屋到這條道路起點的寶藏屋所經過的寶藏屋的數量(包括贊助商幫你打通的寶藏屋和這條道路起點的寶藏屋)。
請你編寫程式為小明選定由贊助商打通的寶藏屋和之後開鑿的道路,使得工程總代價最小,並輸出這個最小值。
input
第一行兩個用空格分離的正整數 n 和 m,代表寶藏屋的個數和道路數。
接下來 m 行,每行三個用空格分離的正整數,分別是由一條道路連線的兩個寶藏屋的編號(編號為 1~n),和這條道路的長度 v。
output
輸出共一行,乙個正整數,表示最小的總代價。
sample input
【輸入樣例 1】
4 5
1 2 1
1 3 3
1 4 1
2 3 4
3 4 1
【樣例輸入 2】
4 5
1 2 1
1 3 3
1 4 1
2 3 4
3 4 2
sample output
【輸出樣例 1】
4【輸入輸出樣例 1 說明】
小明選定讓贊助商打通了 1 號寶藏屋。小明開發了道路 1->2,挖掘了 2 號寶藏。開發了道路 1->4,挖掘了 4 號寶藏。還開發了道路 4->3,挖掘了 3 號寶藏。工程總代價為:1 × 1 + 1 × 1 + 1 × 2 = 4
(1->2) (1->4) (4->3)
【樣例輸出 2】
5【輸入輸出樣例 2 說明】
小明選定讓贊助商打通了 1 號寶藏屋。小明開發了道路 1->2,挖掘了 2 號寶藏。開發了道路 1->3,挖掘了 3 號寶藏。還開發了道路 1->4,挖掘了 4 號寶藏。工程總代價為:1 × 1 + 3 × 1 + 1 × 1 = 5
(1->2) (1->3) (1->4)
data constraint
對於 20%的資料:
保證輸入是一棵樹,1≤n≤8,v≤5000 且所有的 v 都相等。
對於 40%的資料:
1≤n≤8,0≤m≤1000,v≤5000 且所有的 v 都相等。
對於 70%的資料:
1≤n≤8,0≤m≤1000,v≤ 5000
對於 100%的資料:
1≤n≤12,0≤m≤1000,v≤ 500000
想法:
設f[i][j]表示一棵樹構造到第i層,狀態為j(選和沒選)的最小代價
然後構造第i+1層的狀態s,然後與每個選了的邊取乙個最小值,推到f[i+1][s]
為什麼是正確的呢(即一定會與第i層狀態連邊),如果和其他點連邊,這種狀態是會被記錄到的,所以不會wa
NOIP2017提高組正式賽 逛公園
description 策策每天都會去逛公園,他總是從1號點進去,從 號點出來。策策喜歡新鮮的事物,他不希望有兩天逛公園的路線完全一樣,同時策策還是乙個特別熱愛學習的好孩子,他不希望每天在逛公園這件事上花費太多的時間。如果1號點到 號點的最短路長為 那麼策策只會喜歡長度不超過 的路線。策策同學想知道...
Noip2017提高組 乳酪
noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...
NOIP2017提高組 列隊
noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...