HRBUST1849商品中心(貪心 思維 並查集)

2021-08-03 11:04:59 字數 1587 閱讀 8481

商品中心

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家電影公司沒有一家願意...