一棵樹的子樹數量

2021-08-19 04:49:58 字數 862 閱讀 8725

原題:who killed cock robin

題意

給出一顆無根樹,問有多少種子圖(包括點)

解析

既然無根樹,那麼就隨便選擇乙個點為rt,就1好了

用x[i]表示以i點為父親得到的圖的可能性

對於每個點i,兒子數為0時,x[i]為0,有n個兒子時,對於每個兒子j所能產生的可能性為x[j]+1,而x[i]為隨便選任意個兒子相乘之和

eg:有三個兒子可能性為2 3 4,可能得到的就是3 4 5

那麼x[i]=3+4+5+3*4+4*5+3*5+3*4*5

任意乘有個公式:dp[i]=dp[i-1]*x[i]+x[i] (dp[i]為前i個數的任意乘)

因為3和4有3,4,3*4,加入5多了5,3*5,4*5,3*4*5,多了的部分就是5*前面部分加乙個5

另外,x[兒子]和x[父親]都要加到ans裡面,因為以父親為root的那部分是從父親開始往下延的,而x[兒子]是以兒子為root的

**

#define n 100009

int n;

vector

v[2*n];

d ans=0;

d fin(int ar,int fa)

d ans=0;

while(!q.empty())

ans=(ans+ans)%mod;

return ans;

}int main()

fin(1,0);

printf("%lld\n",ans);

}

另一棵樹的子樹

給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。示例 1 給定的樹 s 3 4 5 1 2 給定的樹 t 4 1 2 返回 true,因為 t 與 s 的乙個子樹擁有相同的...

如何判斷一棵樹是不是另一棵樹的子樹

package suanfatest class treenode treenode int value treenode int value,treenode leftchild,treenode rightchild public int getvalue public void setvalu...

leetcode 另一棵樹的子樹

題目描述 給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹 s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。測試用例 給定的樹 s 給定的樹 t 返回 true,因為 t 與 s 的乙個子樹擁有相同的結構和節點值。思路 若...