BZOJ2314 士兵的放置 樹形DP

2022-05-21 17:18:10 字數 926 閱讀 1363

八中有n個房間和n-1雙向通道,任意兩個房間均可到達.現在出了一件極bt的事,就是八中開始鬧鬼了。老大決定加強安保,現在如果在某個房間中放乙個士兵,則這個房間以及所有與這個房間相連的房間都會被控制.現在

老大想知道至少要多少士兵可以控制所有房間.以及有多少種不同的方案數. 

第一行乙個數字n,代表有n個房間,房間編號從1開始到n.n<=500000,下面將有n-1行,每行兩個數,代表這兩個房間相連. 

第一行輸出至少有多少個士兵才可以控制所有房間第二行輸出有多少種方案數,方案數會比較大,輸出除以1032992941的餘數吧. 

61 2

1 31 5

1 45 622

第一種方案是將士兵放在1號房間及6號房間 

第二種方案是將士兵放在1號房間及5號房間 

題解:樹形dp求最小支配集,怎麼求最小支配集我就不說了,求的時候順便記錄一下方案數,最好是自己yy來搞

注意以下幾點:

1.由於涉及到乘法,所以最好開long long

2.有可能出現乙個點既被父親支配又被兒子支配的情況,注意不要算重複

#include #include #include #define mod 1032992941ll

using namespace std;

const int maxn=500010;

typedef long long ll;

int to[maxn<<1],next[maxn<<1],head[maxn];

ll g[maxn][3],f[maxn][3];

int n,cnt;

//0:父親 1:兒子 2:自己

void add(int a,int b)

void dfs(int x,int fa)

}int main()

BZOJ 1907 樹的路徑覆蓋 樹形DP

題目大意 給定一棵樹,求最小路徑覆蓋 資料範圍1w,看到還想跑網路流來著 不過算了明明樹形dp這麼水還是不要用網路流這種大殺器為好 首先將所有的鏈都考慮成以鏈上所有點的lca為轉折點的v字形 那麼點有兩種 轉折點和非轉折點 因此我們選擇兩種狀態進行轉移 還會和父親組成鏈的狀態和成為轉折點的狀態 轉移...

BZOJ1907 樹的路徑覆蓋 樹形DP

time limit 5 sec memory limit 259 mb submit 661 solved 299 submit status discuss 1 22 3 2 44 6 5 66 7 3對於每個節點x f x 0 表示沒有選擇x點與父節點相連的路徑時,其子樹的最小路徑覆蓋數 f ...

bzoj4813 樹形dp 小Q的棋盤

description 小q正在設計一種棋類遊戲。在小q設計的遊戲中,棋子可以放在棋盤上的格點中。某些格點之間有連線,棋子只能 在有連線的格點之間移動。整個棋盤上共有v個格點,編號為0,1,2 v 1,它們是連通的,也就是說棋子從任意格 點出發,總能到達所有的格點。小q在設計棋盤時,還保證棋子從乙個...