時間限制:
4000ms
單點時限:
2000ms
記憶體限制:
256mb
有乙個n個節點的樹,其中點1是根。初始點權值都是0。
乙個節點的深度定義為其父節點的深度+1,。特別的,根節點的深度定義為1。
現在需要支援一系列以下操作:給節點u的子樹中,深度在l和r之間的節點的權值(這裡的深度依然從整個樹的根節點開始計算),都加上乙個數delta。
問完成所有操作後,各節點的權值是多少。
為了減少巨大輸出帶來的開銷,假設完成所有操作後,各節點的權值是answer[1..n],請你按照如下方式計算出乙個hash值(請選擇合適的資料型別,注意避免溢位的情況)。最終只需要輸出這個hash值即可。
mod =1000000007; // 10^9 + 7
magic= 12347;
hash =0;
for i= 1 to n do
hash = (hash * magic + answer[i]) mod mod;
endfor
第一行乙個整數t (1 ≤ t ≤ 5),表示資料組數。
接下來是t組輸入資料,測試資料之間沒有空行。
每組資料格式如下:
第一行乙個整數n (1 ≤ n ≤ 105),表示樹的節點總數。
接下來n - 1行,每行1個數,a (1 ≤ a ≤ n),依次表示2..n節點的父親節點的編號。
接下來乙個整數q(1 ≤ q ≤ 105),表示操作總數。
接下來q行,每行4個整數,u, l, r, delta (1 ≤ u ≤ n, 1 ≤ l ≤ r ≤ n, -109 ≤ delta ≤ 109),代表一次操作。
對每組資料,先輸出一行「case x: 」,x表示是第幾組資料,然後接這組資料答案的hash值。
小資料:1 ≤ n, q ≤ 1000
大資料:1 ≤ n, q ≤ 105
點1的子樹中有1,2,3三個節點。其中深度在2-3之間的是點2和點3。
點2的子樹中有2,3兩個節點。其中沒有深度為1的節點。
所以,執行完所有操作之後,只有2,3兩點的權值增加了1。即答案是0 1 1。再計算對應的hash值即可。
樣例輸入
131221 2 3 1
2 1 1 1
樣例輸出
case 1: 12348
這道題當時純模擬大資料的時候果斷tle了,後來參考了大神的部落格,用樹狀態陣列+dfs做的
用h陣列記錄深度,用num陣列存某個深度下的權值,一邊dfs,一邊更新num陣列。但是值得注意的是某個點的權值就是他那個深度上的權值.但是加權操作時不是一整層都加的,只是加某一子樹上的,如果給一整層都加上,會影響到別的不該加權的子樹,這怎麼辦呢?別急,算完這顆子樹,再把加權都減掉就好了。這裡巧在計算的順序,不是一口氣算出所有點權,都是按照dfs序乙個個算。按dfs序,遍歷到某點,執行u等於該點區間操作,更新之前建的線段樹。由於與他祖先節點相關的操作都已經更新到線段樹上了,所以當前線段樹上對應深度的值就是他的權值。等遍歷出了他這棵子樹,也就是他的孩子節點都算完了,再把之間的操作消掉。挺巧妙的乙個思路。
#include#include#include#include#include#include#includeusing namespace std;
vector> point;
const double eps=0.0000000001;
bool operator < (const pair&lhs,const pair&rhs)
int main()
sort(point.begin(),point.end());
double l=point[0].first;
double h=point[point.size()-1].first;
while(fabs(l-h)>=eps)
else
}printf("case %d: %.5lf\n",c,l);
} }return 0;
}
2014程式設計之美初賽第一場
時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 一般來說,我們採用針孔相機模型,也就是認為它用到的是小孔成像原理。在相機座標系下,一般來說,我們用到的單位長度,不是 公尺 這樣的國際單位,而是相鄰畫素的長度。而焦距在相機座標系中的大小,是在影象處理領域的乙個非常重要的物理量。...
程式設計之美初賽第一場
時間限制 12000ms 單點時限 6000ms 記憶體限制 256mb a市是乙個高度規劃的城市。可是科技高階發達的地方,居民們也不能忘記運動和鍛鍊,因此城市規劃局在設計a市的時候也要考慮為居民們建造乙個活動中心。方便居住在a市的居民們能隨時開展運動。鍛鍊強健的身心。城市規劃局希望活動中心的位置滿...
2014程式設計之美初賽第一場 1002 樹
時間限制 4000ms 單點時限 2000ms 記憶體限制 256mb 有乙個n個節點的樹,其中點1是根。初始點權值都是0。乙個節點的深度定義為其父節點的深度 1,特別的,根節點的深度定義為1。現在需要支援一系列以下操作 給節點u的子樹中,深度在l和r之間的節點的權值 這裡的深度依然從整個樹的根節點...