題意:
ural大學有n名職員,編號為
他們的關係就像一棵以校長為根的樹,父節點就是子節點的直接上司。
每個職員有乙個快樂指數,用整數
現在要召開一場周年慶宴會,不過,沒有職員願意和直接上司一起參會。
在滿足這個條件的前提下,主辦方希望邀請一部分職員參會,使得所有參會職員的快樂指數總和最大,求這個最大值。
輸入格式
第一行乙個整數
接下來接下來
最後一行輸入0,0。
輸出格式
輸出最大的快樂指數。
資料範圍
題解:
f[x][0]表示從以x為根的子樹邀請一部分職員參會,並且x不參加舞會時,快樂指數總和的最大值。此時,x的所有子節點(直接下屬)可以參會,也可以不參會。
f[x][1]表示從以x為根的子樹邀請一部分職員參會,並且x參加舞會時,快樂指數總和的最大值。此時,x的所有子節點(直接下屬)都不能參會。
我們先找到沒有上司的節點
簡單附**:
#include #define inf 0x3f3f3f3f
#define pair pair#define int long long
#define fir first
#define sec second
namespace fastio
inline char nc()
} return *p1++;
} inline bool blank(char ch)
templateinline bool read(t &x)
inline bool read(double &x)
if(sign)x=-x;
return true;
} inline bool read(char *s)
inline bool read(char &c)
return true;
} templatebool read(t& h,u&... t)
#undef out_size
#undef buf_size
};using namespace fastio;using namespace std;
const int n=1e6+5;
const int mod=1e9+7;
int h[n];
bool v[n];
vectorson[n];
int f[n][2];
void dp(int x)
}signed main()
int a,b;read(a,b);
int root;
for(int i=1;i<=n;i++)
} dp(root);
printf("%lld\n",max(f[root][0],f[root][1]));
return 0;
}
選課 0x50 動態規劃 例題
學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。學校開設了 n n 300 門的選修課程,每個學生可選課程的數量 m 是給定的。學生選修了這 m 門課並考核通過就能獲得相應的學分。在選修課程中,有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其他的一些課程的...
0x50 動態規劃 傳紙條 線性DP
給定乙個 n m n mn m 的矩陣 a aa,每個格仔中有乙個整數。現在需要找到兩條從左上角 1,1 1,1 1,1 到右下角 n,m n,m n,m 的路徑,路徑上的每一步只能向右或向下走。路徑經過的格仔中的數會被取走。兩條路徑不能經過同乙個格仔。求取得的數之和最大是多少。n,m 50 n,m...
0x50 動態規劃(練習)20 乾草堆(題解)
題目鏈結 題意 奶牛們討厭黑暗。為了調整牛棚頂的電燈的亮度,bessie必須建一座乾草堆使得她能夠爬上去夠到燈泡。一共有n大包的乾草 從1到n編號 依靠傳送帶連續的傳輸進牛棚來。第i包乾草有乙個寬度wi。所有的幹草包的厚度和高度都為1。bessie必須利用所有n包乾草來建立起乾草堆。她可以想放多少包...