商品中心
time limit: 2000 ms
memory limit: 32768 k
total submit: 7(5 users)
total accepted: 3(3 users)
rating:
special judge: no
description
有n個城鎮(編號從1到n)城鎮之間有一些雙向道路相連,並且保證任意兩個城鎮之間只有一條唯一的路線。
每一條道路都有乙個運送商品的容量。
假設城鎮i到城鎮j有一條路線,我們定義城鎮i向城鎮j運送商品的容量等於路線中道路運送商品的容量的最小值。
現在想建乙個商品中心,
並且要求商品中心到其他所有的城鎮運送商品容量和最大。
input
有多組測試資料
第一行是乙個整數n(1<=n<=200000)
接下來n-1行每行三個整數a,b,c表明城鎮a和城鎮b之間道路運送商品容量為c。
output
對於每組測試資料,輸出乙個整數商品中心到其他所有的城鎮運送商品容量和最大值。
sample input
41 2 2
2 4 1
2 3 1
41 2 1
2 4 1
2 3 1
sample output43
思路:現在有乙個最小權值作為約束,那麼我們不妨先將所有邊按照從大到小排序。
那麼當前邊的權值w,就是聯通兩個聯通塊的必經最小權值邊。
那麼對於當前這條邊連線的兩個聯通塊x.y.要麼我們讓x中的乙個點作為根,跑到y中,使得這條邊的貢獻度為w*y集合中點的個數,或者我們讓y中的乙個點作為根,跑到x中,使得這條邊的貢獻度為w*x集合中點的個數。
無論我們怎樣選,最終都會使得兩個集合合併在一起。
那麼我們肯定貪心去做,對於集合x.其中肯定有乙個點作為根,已經跑遍了x中的其他所有點,其總權值和設定為ans【x】.對於結婚y.也是肯定有乙個點作為跟,已經跑遍了y中的所有點,其總權值和設定為ans【y】.根據貪心道理來講,此時的x是區域性貪心,y也是區域性貪心,那麼兩個區域性貪心比較大小是可以得到整體貪心的。
那麼我們連線兩個點合併為同一連通塊的時候,比較ans【x】+w*y集合中點的個數和ans【y】+w*x集合中點的個數的大小,讓大的那邊的根作為合併之後的集合的總根,達到當前區域性最優貪心,從而不斷的連線兩個聯通塊,來得到整體的最優貪心。
#includeusing namespace std;
const int maxn = 2e5+5;
int fa[maxn], sum[maxn], ans[maxn];
struct edge
}edge[maxn];
int getf(int x)
return ret;
}int main()
else
}int output = 0;
for(int i = 1; i <= n; i++)
output = max(output, ans[i]);
printf("%d\n", output);
}return 0;
}
poj 1849 貪心 樹形dp
題意是 在m點有兩輛車,要清掃所有的路,問走的最短路。題目鏈結 和poj1935 差不多,poj 1935 是乙個人走的最短路。題解 所有邊權和 2 樹的最長路徑。樹形dp的解法不會,include include include includeusing namespace std define ...
POJ1849 Two(樹的直徑)
題意 有一顆n個結點的帶權的無向樹,在s結點放兩個機械人,這兩個機械人會把樹的每條邊都走一遍,但是最後機械人不要求回到出發點.問你兩個機械人走的路總長之和的最小值是多少?思路 考慮從乙個結點遍歷整個樹再回到原點需要把每個邊計算兩遍,這裡機械人不用回到出發點,所以兩個機械人到達的點越遠越好。讓兩個機械...
你遭遇過1849次拒絕嗎?
美國,一位窮苦潦倒的年輕人,即使身上全部的錢都加起來都不夠買一件像樣的西服的時候,仍全心全意地堅持著心中的夢想。他想做演員,拍電影,當明星。當時,好萊塢有500家電影公司,他根據自己的路線與排列好的名單順序,帶著自己寫好的 量身訂做的劇本一一前去拜訪。但第一遍下來,所有的500家電影公司沒有一家願意...