P2986 USACO10MAR 偉大的奶牛聚集

2022-04-16 20:59:38 字數 1405 閱讀 3973

題意:

給一棵 n 個點的邊 + 點權樹,求帶權重⼼ 

思路:其實這題和之前那個 sta 有點像,我們同樣只需要預處理出乙個f[u] 代表以 u 為集合點的方便程度,那麼我們就可以o(1)的轉移了

假設 v 是 u 的兒子,f[v] = f[u] - (siz[v] * len) + (n - siz[v] ) * len = f[u] + (n - 2 * siz[v] )  * len

這題有乙個坑,就是你的inf得開的特別大,不然你就沒有 100 了

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f3f3f3f3f3f

#define ls nod<<1

#define rs (nod<<1)+1

const

double eps = 1e-10

;const

int maxn = 1e5 + 10

;const ll mod = 1e9 + 7

;int sgn(double a)

using

namespace

std;

struct

edge e[maxn

<< 1

];int

head[maxn];

ll siz[maxn],dis[maxn],num[maxn],f[maxn];

intcnt,n;

ll ans;

inline

void add_edge(int u,int v,int

w) inline

void dfs(int u,int

f) }

inline

void func(int x,int

fa)

}int

main()

for (int i = 1;i < n;i++)

dfs(

1,0);

for (int i = 1;i <= n;i++)

func(

1,0);

for (int i = 1;i <= n;i++)

cout

<< ans

}

USACO10MAR 偉大的奶牛聚集

因為是英文題,題目不再重複。給你一棵無根樹,每條邊有邊權,每個點有點權,要你選乙個點,使每個點到這個點的距離 點權的和最小,求這個值。設dis u 為u所有後代到它的距離 點權,sum u 為u所有後代的點權和包括u 先以1為根dfs一遍,預處理出所有的dis,sum 然後問題就變成了更換這棵樹的根...

P2943 Usaco2009 Mar 打掃衛生

神題一道 變數異常複雜,請在結合程式及注釋的情況下 根據題意不難看出,在選擇的一段區間內,最多有 n sqrt n 種不同的食物。據此設計dp陣列f i 表示i時的最小代價。設計輔助陣列pos j 表示最多選j種食物時區間左端點位置。思考 遍歷到i時,使區間食物種數不變應滿足什麼條件?得出 若上乙個...

P2983 USACO10FEB 購買巧克力

題解 注意題目開 long long 貪心策略 從低到高,買夠為止 反證 若剩下的有乙個k 比k小,那麼交換,穩賺不賠 所以,在買k之前,所有比他便宜的都買完了 include include include include include include include include using...