洛谷 p1352沒有上司的舞會
題目描述
*某大學有 n 個職員,編號為 1…n。輸入格式他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數 r[i
]r[ i ]
r[i]
,但是呢,如果某個職員的直接上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計計算,邀請哪些職員可以使快樂指數最大,求最大的快樂指數。
輸入的第一行是乙個整數 nnn。輸出格式第 2 到第 (n+
1)
(n + 1)
(n+1
) 行,每行乙個整數,第(i+
1)
(i + 1)
(i+1
) 行的整數表示 ii 號職員的快樂指數r[i
]r[ i ]
r[i]
。第 (n+
2)
(n + 2)
(n+2
)到第(2n
+1
)(2n+1)
(2n+1)
行,每行輸入一對整數 l,k
l, k
l,k,代表 k
kk 是 l
ll 的直接上司。
輸出一行乙個整數代表最大的快樂指數。樣例輸入
711
1111
1132
3647
4453
5
樣例輸出5
說明/提示
資料規模與約定
對於 100% 的資料,保證
1 ≤n
≤6∗10
³1 ≤ n ≤ 6*10³
1≤n≤6∗
10³,
−
128≤r[
i]
≤127
-128 ≤ r[ i ] ≤ 127
−128≤r
[i]≤
127,
1 ≤l
,k≤n
1 ≤ l,k ≤ n
1≤l,k≤
n。且給出的關係一定是一棵樹。
一道入門級別的樹形dp。
在攻克題目之前,我們先來分析一下樹形dp的運作方式。
樹形dp為了保證取點最優,必須從葉節點不斷推向根節點(廢話 ),求得最右值。眾所周知,根節點是沒有爸爸(上司)的,我們可以親切地稱呼他為孤兒(手動滑稽^ _ ^)
然後開始分析樣例:(注:圖1為編號關係,圖2為快樂值)
是不是發現只有5沒有直屬上司(孤兒 )?這個(孤兒 ) 就是可愛的根節點,那我們該怎麼尋找呢?
別急啊,我們先建樹。
建樹的方法主要有兩種:
1.stl vec
to
rvector
vector
首先,我們通過vec
to
rvector
vector
來定義son
[6005
]son[6005]
son[60
05],即vec
to
r t>so nvectorson vector t>so n用son[ i] son[i] son[i] 來儲存i ii結點的所有兒子,建樹。 定義root,運用root尋找根節點:for
(register
int i =
1; i < n; i++
)int root =0;
for(
register
int i =
1; i <= n; i++
)}定義二維陣列f
[6005][
2]
f[6005][2]
f[6005
][2]
,以f[i]
[0
]f[i][0]
f[i][0
]定義上司去,下屬不去,
以f [i
][1]
f[i][1]
f[i][1
]定義上司不去,下屬去。
則得出動態轉移方程:(y是x的兒子)
上司去,下屬不去:f[x
][0]
+=ma
x(f[
y][0
],f[
y][1
])
f[x][0] += max(f[y][0],f[y][1])
f[x][0
]+=m
ax(f
[y][
0],f
[y][
1])上司不去,下屬去:f[x
][1]
+=f[
y][0
]f[x][1] += f[y][0]
f[x][1
]+=f
[y][
0]
f[x][0
]+= max (f[y][1
], f[y][0
]);//上司不去,下屬去或不去
f[x][1
]+= f[y][0
];// 上司去,下屬不去
分析結束上**:
a cc
ode:
ac code:
accode
:
#include
#define max 6005
using
namespace std;
int n, r[max]
, v[max]
, f[max][2
];vector<
int>son[max]
;//stl
inline
void dp (
int x)
return;}
intmain()
int root =0;
for(
register
int i =
1; i <= n; i++)}
dp (root)
;//dp
return
!printf (
"%d"
, max (f[root][1
], f[root][0
]));
//省了一行
}
拜拜 沒有上司的舞會 樹形dp入門
某大學有n個職員,編號為1 n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數ri,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞會了。所以,請你程式設計計算,邀請...
樹形dp 沒有上司的舞會 模板題 樹形dp
樹形dp思維門檻高,但是跨過門檻之後,思維難度卻不高。這點非常類似於 關鍵是要體會採用二進位制數來表示狀態的思想,要轉變傳統思維,學習接收並吸收這種思想。285.沒有上司的舞會 簡單模擬樣例,便於理解 樣例的高興度都是 1,那就是挑選沒有相鄰邊的盡量多的點 樹形dp思路 重點 狀壓dp 思路 狀態轉...
樹形dp 沒有上司的舞會
題意 給定一棵樹,每個點有權值,對於每乙個點,它和它的父節點不能同時被選,求權值最大值。定義d p x 0 dp x 0 表示不選擇x號點時的最大值,dp x 1 d p x 1 表示選擇 x x 號點時的最大值。對於x role presentation style position relati...