蘋果曼和樹

2022-08-22 01:03:09 字數 1205 閱讀 6607

1.0 秒

131,072.0 kb

80 分

5級題蘋果曼有一棵n個點的樹。有一些(至少乙個)結點被標記為黑色,有一些結點被標記為白色。

現在考慮乙個包含k(0 ≤ k < n)條樹邊的集合。如果蘋果曼刪除這些邊,那麼會將這個樹分成(k+1)個部分。每個部分還是一棵樹。

現在蘋果曼想知道有多少種邊的集合,可以使得刪除之後每乙個部分恰好包含乙個黑色結點。答案對1000000007 取餘即可。

收起

單組測試資料。

第一行有乙個整數n (2 ≤ n ≤ 10^5),表示樹中結點的數目。

第二行有n-1個整數p[0],p[1],...,p[n-2] (0 ≤ p[i] ≤ i)。表示p[i]和(i+1)之間有一條邊。結點從0開始編號。

第三行給出每個結點的顏色,包含n個整數x[0],x[1],...,x[n-1] (x[i]是0或者1)。如果x[i]是1,那麼第i個點就是黑色的,否則是白色的。

輸出答案佔一行。

3

0 00 1 1

2
#include #define rg register int

using

namespace

std;

typedef

long

long

ll;const ll mod = 1e9 + 7

;const

int maxn = 2e5 + 10

;struct

node o[maxn];

intn, tot, head[maxn];

inline

void add_edge(int u, int

v) int

color[maxn];

ll dp[maxn][6];

inline

void solve(int cur, int

f) }

intmain()

for (register int i = 0; i < n; ++i)scanf("

%d", &color[i]);

solve(

0, -1

); printf(

"%lld\n

", dp[0][1

]);

return0;

}

51 nod 蘋果曼和樹

1500 蘋果曼和樹 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5 級演算法題 收藏 關注 蘋果曼有一棵 n個點的樹。有一些 至少乙個 結點被標記為黑色,有一些結點被標記為白色。現在考慮乙個包含 k 0 k n 條樹邊的集合。如果蘋果曼刪除這些邊,那麼會將這個樹分成 k ...

51nod 1500 蘋果曼和樹(樹形dp)

題目 思路 分析狀態間的關係 dp u 1 0 代表與u相連的聯通塊是否具有黑點的方案數 注意有刪邊 dp u 1 當u相連的聯通塊具有黑點時,兒子結點v具有黑點與否都可以 當u相連的聯通塊不具有黑點時,兒子結點必須具有黑點 dp u 0 u相連的聯通塊肯定不具有黑點,兒子結點具有黑點與否都可以 i...

51 Nod 1500 蘋果曼和樹(樹形dp)

思路 樹形dp。我們考慮當前結點 i 對於結點 i 它可以屬於它的子樹,也可以不屬於,換句話說,我們可以計算出與 i 結點相連的連通塊中是否具有黑點的方案數。於是,d i 表示包含 i 的連通塊中含有黑點,d i 表示不含有。接下來考慮狀態轉移方程 上面的只是我個人認為的。可能是錯的哈 1 incl...