說是樹狀dp的入門水題,然而甚至感覺不到dp的存在。。。
好吧,理論上這個確實是dp,由之前階段推出當前階段,以子結點為根的子樹結點個數可以推出以父結點為根的子樹結點個數。
然後針對每條邊,根據題目要求的那樣統計答案即可。不過我們統計時利用的應該是子結點的資訊,怎麼找到子結點?因為父結點的資訊是由子結點的資訊得來的,所以一定大於子結點。
另外,因為樹狀dp是建立在樹這一資料結構上的,因此可以用到與樹相關的各種特殊性質。
1 #include2 #include3 #include4ac**using
namespace
std;
5 inline int abs(int i)
6const
int maxn=1e6+5;7
intn,head[maxn],eid,vis[maxn],size[maxn];
8long
long
ans;
9struct
edge
12 } e[2*maxn];
13void insert(int u,int v,int
w) 18
int dfs(int
u) 26
return
size[u];27}
28int
main()
37 vis[1]=1
;38 dfs(1
);39
for(int i=0;i2
) 44 printf("
%lld
",ans);
45return0;
46 }
計蒜客習題 蒜頭君倒水
推出轉移矩陣 1 xyx1 y begin 1 x y x 1 y end 1 xx y1 y 之後的就很顯然了 倒了幾次就是求轉移矩陣的幾次冪 然後乘上原矩陣 ab begin a b end ab 即可 傳送門注意矩陣乘法不滿足交換律 includeusing namespace std dou...
計蒜客習題 蒜頭君的積木
問題描述 蒜頭君酷愛搭積木,他用積木搭了 n 輛重量為 wi的小車和一艘最大載重量為 w 的小船,他想用這艘小船將 n 輛小車運輸過河。每次小船運載的小車重量不能超過 w。另外,小船在運載小車時,每輛小車會對小船有乙個損壞值si,當多輛小車一起運載時,該趟運載對小船的損壞值為船上所有小車的最大損壞值...
計蒜客習題 蒜頭君走迷宮
蒜頭君從乙個 n 行 m 列的迷宮的左上角走到右下角,蒜頭君每次只能向下或者向右走一步,蒜頭君想知道他有多少種走法。輸入格式 輸入兩個整數 n 2 n 10 5 m 2 m 10 5 輸出格式 由於方案數太多,輸出最後結果對 1000000007 取模的結果。樣例輸入 2 3 樣例輸出 3 incl...