題解 JSOI2013 哈利波特與死亡聖器

2022-05-07 22:21:17 字數 995 閱讀 9684

轉化問題, 即乙個點從根節點往下走, 到達任意乙個點時, 保證每乙個與他直接連通的點都被覆蓋了

沒有必要向上走, 因為這只會留更多時間來修復

所以我們討論只下不上的情況

二分乙個 mid , 代表當前共有 mid 個人

設 \(f[i]\) 為到了 \(i\) 點, 且 \(i\) 的兒子全部未被覆蓋, 需要之前多少次額外的來覆蓋

有\[f[i] = max(0, \sum f[v] + son[i] - mid)

\]有 mid 個人可以用, 要覆蓋 \(son[i]\) 個兒子, 看還需要多少個額外的來覆蓋 \(i\) 的兒子, 並且要把 \(i\) 的兒子那棵子樹也算上

跟 0 取 \(max\) 是因為這個點多出來的不能夠去補上面的

#include #include #include #include const int n = 300005; 

using namespace std;

int n, cnt, f[n], sz[n], head[n], ans;

struct edge e[n << 1];

template< typename t >

inline t read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * w;

}inline void adde(int u, int v) , head[u] = cnt; }

void dfs(int u, int fa, int mid)

f[u] += sz[u];

if(f[u] < 0) f[u] = 0;

}int main()

int l = 0, r = n;

while(l <= r)

printf("%d\n", ans);

return 0;

}

JSOI2013 哈利波特和死亡聖器

傳送門 首先二分,這沒什麼好說的。然後就成了乙個恆成立問題,就是說我們需要滿足最壞情況下的需求。那麼顯然在最壞情況下伏地魔是不會走回頭路的 因為這顯然是白給 那麼我們肯定需要在所有它可能去的下乙個點都設定防禦。也就是說要對當前ta所在點的所有葉子設防。那麼我們就可以考慮 text 設 dp i 表示...

哈利波特5 哈利波特與鳳凰社

哈利波特5之鳳凰令 國語配音高畫質收藏版 原 片 名 harry potter and the order of the phoenix 外文別名 harry potter and the order of the phoenix the imax experience usa imax versi...

JSOI2013 快樂的 JYY 題解

題面傳送門 我們一句話題意 求兩個字串的公共回文子串的數量 首先對於每個串構造乙個回文自動機,然後由pam的定義可知 對於pam上從根節點轉移方式相同所到達的點代表的回文串是相同的 這樣對於兩個pam同時dfs,每次dfs到的節點的數值 在其原串中的出現數量 相乘,然後累加到答案裡 注意 要從偶原點...