樹專題---連通域問題
阿新 • • 發佈:2018-12-13
樹專題—連通域問題
在acm競賽樹型問題中,經常會遇到與連通域相關問題。將樹拆成m個連通塊的方案數或者統計包含節點i的連通域的數目。在此,我們對此類問題進行總結。
型別一: 拆成m個互斥連通域
題意:樹拆成m個互斥且不為空的連通域,拆有時間次序,問拆的不同方案總數。 |
分析:如果沒有什麼經驗,這道題一時半會還真想不到什麼辦法解決。當然靈感來 |
了,很快就能解決,這道題就是一道公式題。有根樹,每個節點都僅有一個根節點 |
我們切斷一條邊uv,原連通域基礎上增加一個以v為根的樹(連通域),即在n-1條邊 |
中選m-1條邊,即會增加m-1塊以所有邊的子節點為根的樹(連通域).
|
#include <iostream>
#include <algorithm>
#include <stdio.h>
#define llt long long
using namespace std;
const llt mod = 1e9+7;
int main(){
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
int u,v;
for(int i=1;i<n;++i)
cin>>u>>v;
llt ans = m;
for(int i=n-m+1;i<n;++i)
ans = ans * i %mod;
cout<<ans<<endl;
}
return 0;
}