poj 3321 Apple Tree(樹狀數組)
輝煌北大的月賽題質量真高啊,這種樹狀數組真難想到。
樹狀數組的基本用法是區間,單點的應用,起初這個怎麼都想不到如何套用到樹狀數組。
轉化方法是 將樹上的節點信息查詢,轉為深度優先中節點順序(代表結點編號)。進結點與出結點分別代表該結點管轄范圍。
題目大意級是說,給你一顆樹,最初每個節點上都有一個蘋果,有兩種操作:修改(即修改某一個節點,修改時這一個節點蘋果從有到無,或從無到有)和查詢(查詢某一個節點他的子樹上有多少個蘋果)。
由於此題數據比較大(N<=10^5),而且不是標准的二叉樹,所以這裡我們隊每一個節點重新編號,另外為每一個節點賦一個左值和一個右值,表示這個節點的管轄范圍。
也就是DFS搜索的時候做標記的過程,這樣新的編號為1~6的節點所管轄的范圍分別就是[1,6] [2,4] [3,3] [4,4] [5,6] [6,6],其中左邊的是左值,右邊的是右值,節點1的區間是[1,6],正好這棵子樹有6個節點,其他也一樣
#include
#include
#include
#include
#include
#include