日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【每日一题】4月7日题目精讲 树

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【每日一题】4月7日题目精讲 树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 131072K
其他語言262144K
64bit IO Format:%lld

題目描述

shy有一顆樹,樹有n個結點。有k種不同顏色的染料給樹染色。一個染色方案是合法的,當且僅當對于所有相同顏色的點對(x,y),x到y的路徑上的所有點的顏色都要與x和y相同。請統計方案數。

輸入描述:

第一行兩個整數n,k代表點數和顏色數; 接下來n-1行,每行兩個整數x,y表示x與y之間存在一條邊;

輸出描述:

輸出一個整數表示方案數(mod 1e9+7)。

示例1
輸入

4 3 1 2 2 3 2 4

輸出

39

備注:

對于30%的數據,n≤10, k≤3;
對于100%的數據,n,k≤300。
題解:
shy爹有棵樹
這個題也可以這么想,把相同顏色當成一個整體,連通塊,問構成連通塊的方案
我們用dp來計數
dp[i][j]表示i個點用了j個顏色的方案
那么轉移方程就是
dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(k-(j-1))
dp[i][j]=第i個點和第i-1個點顏色相同或者第i-1個點所用的顏色與之前不同,之前用了(j-1)個顏色,這個點可用的顏色種類就是k-(j-1)
(可以理解成前者在一個連通塊,后者不在一個連通塊內)
因為數據給的肯定是棵樹,那樹的形狀并不會影響結果,所以。。。也可以不輸入那(n-1)

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=303; ll mod =1e9+7; ll dp[maxn][maxn]; int n,k; ll sum=0; int main() {cin>>n>>k;for(int i=1;i<=n;i++){for(int j=1;j<=k;j++){if(i==1&&j==1){dp[i][j]=k;}else dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*(k-(j-1)))%mod;}}for(int i=1;i<=k;i++){sum=(sum+dp[n][i])%mod;}printf("%lld",sum);return 0; }

總結

以上是生活随笔為你收集整理的【每日一题】4月7日题目精讲 树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。