[HEOI 2015] 兔子與櫻花(貪心) | 錯題本
題目
分析
從葉子往根做,考慮選取 u u u 子節點 v v v 中 w ( v ) = s o n ( v ) + c v w(v) = son(v) + c_v w(v)=son(v)+cv 小的優先刪除,因為假如此時不刪 w ( v ) w(v) w(v) 最小而刪 w ( v ) w(v) w(v) 更大的 v v v,必然會使 u u u 更容達到到 m m m 的限制,於是刪除的節點數不會多於刪最小的。
程式碼
#include <bits/stdc++.h>
int Read() {
int x = 0; char c = getchar();
while (c < '0' || c > '9')
c = getchar();
while (c >= '0' && c <= '9')
x = x * 10 + (c ^ 48), c = getchar();
return x;
}
const int MAXN = 2000000;
int N, M, Ans;
int C[MAXN + 5], K[MAXN + 5];
std::vector<int> G[MAXN + 5];
inline bool Comp(const int &i, const int &j) {
return K[i] + C[i] < K[j] + C[j];
}
void Dfs(const int &u) {
for (int v: G[u])
Dfs(v);
std::sort(G[u].begin(), G[u].end(), Comp);
for (int v: G[u]) {
if (K[u] + K[v] - 1 + C[u] + C[v] <= M)
K[u] += K[v] - 1, C[u] += C[v], Ans++;
else break;
}
}
int main() {
N = Read(), M = Read();
for (int i = 0; i < N; i++)
C[i] = Read();
for (int i = 0; i < N; i++) {
K[i] = Read();
for (int j = 1; j <= K[i]; j++)
G[i].push_back(Read());
}
Dfs(0);
printf("%d", Ans);
return 0;
}
相關文章
- bzoj4029: [HEOI2015]定價(貪心)
- 貪心例題
- C++奧賽一本通貪心題解C++
- 【貪心】【二分】[NOIP2015]跳石頭
- 反悔貪心雜題
- 「貪心」做題記錄
- 貪心 做題筆記筆記
- 刪數問題(貪心)
- 貪心-刪數問題
- bzoj3613: [Heoi2014]南園滿地堆輕絮(二分+貪心)
- bzoj 2721: [Violet 5]櫻花
- 貪心(入門簡單題)
- 淺談貪心與動歸
- 貪心
- Find the Maximum - 題解【思維,貪心】
- 區間問題的貪心方法
- Python——畫一棵漂亮的櫻花樹(不同種櫻花+玫瑰+聖誕樹喔)Python
- 反悔貪心
- Supermarket(貪心)
- 一場櫻花雨(Python實現)Python
- 洛谷P1445 [Violet]櫻花
- 洛谷P3586 [POI2015]LOG(貪心 權值線段樹)
- 貪心演算法——換酒問題演算法
- leetcode1546題解【字首和+貪心】LeetCode
- 【python】待君有餘暇,看春賞櫻花,這不得來一場浪漫的櫻花旅~Python
- 洛谷P4113 [HEOI2012]採花
- 「演算法」貪心與隨機化演算法隨機
- 貪心+搜尋
- 貪心演算法篇——區間問題演算法
- leetcode1552題解【二分+貪心】LeetCode
- 加油站問題(貪心演算法)演算法
- 【ybtoj】【貪心】【堆】【例題1】奶牛曬衣服
- LeetCode:動態規劃+貪心題目整理LeetCode動態規劃
- 錯題本
- 櫻花熱水器全國各市售後服務電話官方24小時櫻花維修中心
- dfs與貪心演算法——洛谷5194演算法
- codeforces 1428E. Carrots for Rabbits(貪心(非常優秀的貪心題),結構體過載運算子)結構體
- 貪心演算法演算法