給出n個點,n-1條邊,顯然是一棵樹,每條邊有權值,而建設每條邊的代價是這條邊的權值乘上這條邊左邊的點數減去右邊的點數的絕對值
求出總代價
很水我們預設點1為樹的根,dfs將每個點遍歷一遍,求出每個點的深度和子樹點數
然後遍歷一遍所有的邊,ans+=邊權*abs(n-深度更深的點的子樹點數*2)
為什麼是n-深度更深的點的子樹點數*2,很簡單,這條邊右邊的點數=深度更深的點的子樹點數,那自然右邊的點數就等於剩下的點數咯,就=n-深度更深的點的子樹點數
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;struct
node
a[2100000];int len,last[1100000
];int tot[1100000],dep[1100000
];void ins(int x,int y,int
d)void dfs(int x,int
fa) }
}int
main()
dfs(
1,0);
ll ans=0
;
for(int i=1;i<=len;i+=2
)
printf(
"%lld\n
",ans);
return0;
}
bzoj 2435 Noi2011 道路修建
description 在 w 星球上有 n 個國家。為了各自國家的經濟發展,他們決定在各個國家 之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝嗇,他們只願 意修建恰好 n 1條雙向道路。每條道路的修建都要付出一定的費用,這個費用等於道路長度乘以道路兩端的國家個數之差的絕對值。例如,在下...
NOI2011道路修建(BZOJ2435)
傳送門 time limit 10 sec memory limit 128 mb 在 w 星球上有 n 個國家。為了各自國家的經濟發展,他們決定在各個國家 之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝嗇,他們只願 意修建恰好 n 1條雙向道路。每條道路的修建都要付出一定的費用,這個費...
bzoj2435 道路修建
道路修建 題目背景 bzoj2435 分析 暴力 dfs 突如其來的傻題 get 直接 dfs,每乙個點對答案的貢獻是,abs n size cur size cur w w 為這個點與父親的連邊的權值 然後就沒有然後了 source created by scarlyw include inclu...