LuoguP1352 FJSC 沒有上司的舞會

2022-05-18 01:17:26 字數 943 閱讀 8954

現在你有一棵樹,每乙個點有乙個點權\(r[i]\),如果選擇了\(i\)點,那麼\(i\)子樹上的所有的點都不能選,現在要求選擇若干個點,使得點權和最大。

設\(dp[i][1]\)為選擇\(i\)點的\(i\)子樹的最大點權和,\(dp[i][0]\)為不選擇\(i\)點的\(i\)子樹的最大點權和,那麼我們知道初始化為

\(dp[i][0] = \sum max(dp[son][1], dp[son][0])\)

\(dp[i][1] = \sum dp[son][0]\)

因為如果選了\(i\)點,那麼下面的所有的點都不能選了,但是如果沒選\(i\),那麼下面的點選不選都行。由於\(i\)點是由其子節點轉化而來的,所以考慮從入度為零的點開始邊深搜邊\(dp\)。

#include #include #include #include using namespace std ;

typedef long long ll ;

const int maxn = 100010 ;

const int maxm = 100010 ;

int n, h[maxn], tot, r[maxn], dp[maxn][2], ind[maxn], root ;

struct node e[maxn << 1] ;

inline void add(int f, int t)

inline int read()

inline void dfs(int now)

}int main()

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

if (! ind[i])

printf("%d", max(dp[root][0], dp[root][1])) ;

return 0 ;

}

Luogu P1352 沒有上司的舞會

洛谷傳送門 某大學有n nn個職員,編號為1 n 1 sim n 1 n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數r ir i ri 但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就...

Luogu P1352 沒有上司的舞會

某大學有n個職員,編號為1 n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數ri,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計計算,邀請...

P1352 沒有上司的舞會

原題鏈結 樹形dp入門 dp方程搞錯了居然還過了90 利用dfs遞迴求解 每個點分為選和不選兩種情況 假設選為1不選為0 dp x 0 max dp num i 1 dp num i 0 這裡一開始寫成了dp num i 1 但它的兒子的兩種狀態實際上都是可選的 dp x 1 dp num i 0 ...