Evensgn 剪樹枝 樹規

2022-03-04 02:08:37 字數 797 閱讀 7568

f[x][0]表示與其父邊相連的連通塊內沒有黑蘋果的方案數,

f[x][1]則表示有黑蘋果,

如果父邊被切斷,相當於沒有黑蘋果

初始化時,假設切掉父邊,f[x][0]=1,f[x][1]=0;

遞迴回時轉移,每遞迴回乙個子樹,f[x][1]=f[x][1]*f[v][0]+f[x][0]*f[v][1],f[x][0]=f[x][0]*f[v][0];

最後處理完每個子樹時,若其為黑蘋果f[x][1]=f[x][0],否則f[x][0]=f[x][0]+f[x][1](可以切掉)

#include#include#include#include#include#define n 100050

#define mod 1000000007ll

using namespace std;

int n,c[n],fa[n];

long long f[n][2];

int e=1,head[n];

struct edgeed[2*n];

void add(int u,int v)

void dfs(int x)

if(c[x]) f[x][1]=f[x][0];

else f[x][0]=(f[x][0]+f[x][1])%mod;

}int main()

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

scanf("%d",&c[i]);

dfs(1);

printf("%lld\n",f[1][1]);

return 0;

}

繁華模擬賽 Evensgn 剪樹枝

繁華中學有一棵蘋果樹。蘋果樹有 n 個節點 也就是蘋果 n 1 條邊 也就 是樹枝 調皮的 evensgn 爬到蘋果樹上。他發現這棵蘋果樹上的蘋果有兩種 一 種是黑蘋果,一種是紅蘋果。evensgn 想要剪掉 k 條樹枝,將整棵樹分成 k 1 個 部分。他想要保證每個部分裡面有且僅有乙個黑蘋果。請問...

概率 樹規 熟練剖分

根節點不一定是1,但是是乙個確定的點,看誰不是兒子就行了。這道題我們考慮從兒子推到根。設f i j 表示以i為根的子樹中,最長輕鏈長度為j的概率。因為每乙個son被選為重兒子的概率相同,且重兒子對父親貢獻和輕兒子不同,所以要每乙個點為重兒子,之後挨個列舉每個兒子。這個效率是n 2,然後要列舉鏈的長度...

LA3942 背單詞 trie樹 簡單動規)

問題描述 給出乙個由s個不同單詞組成的字典和乙個長字串。把這個字串分解成若干個單詞的連線 單詞可以重複使用 有多少種方法?比如4個單詞 則 abcd 有兩種分解方法 a b cd 或 ab cd 輸入格式 第一行為長字串 僅由小寫字母組成 第二行乙個整數n,表示字典包含的單詞數。以下n行,每行為乙個...