【問題描述】
魔法森林裡有很多蘑菇,魔法使常常採摘它們來製作魔法藥水。為了在6月的那個奇妙的晚上用魔法綻放出最絢麗的烟花,魔法使決定對魔法森林進行一番徹底的勘探。
魔法森林分為n個區域,由n-1條長度相等的道路將它們連線為了無向連通圖。每個區域都有乙個等級,這n個區域的等級滿足如下性質:
①1號區域的等級為1;
②由一條道路連線的兩個區域(即相鄰兩個區域)等級相差為1;
③設兩個區域x,y被一條道路連線,若x到1號區域的最短距離小於y到1號區域的最短距離,則有x到1號區域的最短路徑上的所有區域的等級必定小於y的等級。
由於魔法森林各個區域的氣候、地形、水文的不同,每個區域都有乙個精華值,其中第i號區域的精華值為wi。整片魔法森林還有乙個共鳴度m。每個區域吸收的精華值為乙個包含該區域的連通子圖的精華值之和,由於共鳴度限制,能被乙個區域吸收精華值的所有區域的等級必須比該區域的等級高x,x為不超過m的自然數。舉個例子:
魔法使希望得到每個區域所吸收的精華值,這將有助於她規劃蘑菇的採摘,於是她把這個任務交給了你,因為她還要去住在這附近的另一位魔法使家中喝杯茶。
【資料範圍】
對於20%的資料,n,m<=1000;
對於70%的資料,n,m<=10^5;
對於另外10%的資料,m=n;
對於100%的資料,0<=n,m<=10^6,0————————————————我是分割線————————————————
我們理解完這道題目後,顯然就可以明白乙個點對於答案的貢獻就是在從該點開始向上爬m步所經過的節點上加上該點的精華值
所以就是在乙個區間上增加自己的精華值
當然就可以用樹上差分啦!
思路清晰,沒什麼可說的
下面貼**
#includeusingnamespace
std;
int val[1000005
];int st[1000005
];int fa[1000005
];int
num,n,m,tp;
int head[1000005
];struct
edgeg[
2000005
];void ins(int u,int v)
void insw(int u,int
v)void dfs(int u,int
fat)
tp--;
}int
main()
dfs(
1,0);
for(int i=1;i<=n;i++)printf("
%d\n
",fa[i]);
fclose(stdin);
fclose(stdout);
}
noip模擬賽(一)魔法樹
魔法樹 mahou.pas c cpp 問題描述 魔法使mored在研究一棵魔法樹。魔法樹顧名思義,這貨是一棵樹 奇葩的是魔法樹上的每一條邊都擁有乙個魔法屬性 如果不那麼奇葩就不是mored的魔法樹了。魔法使mored在研究這棵魔法樹的方法比較奇葩,每一次他會選擇一條路徑 施法。這個魔法是mored...
Noip模擬題 教主的魔法
time limit 10 sec memory limit 512 mb submit 129 solved 57 教主最近學會了一種神奇的魔法,能夠使人長高。於是他準備演示給xmyz資訊組每個英雄看。於是n個英雄們又一 次聚集在了一起,這次他們排成了一列,被編號為1 2 n。每個人的身高一開始都...
2015 10 31的NOIP模擬賽
這是noip前的最後一周了。第一題是個組合數學的問題,規模不算太大。但第一反應就直接dp了,o n 2 的複雜度,始終想不到優化。本來看著1 3 4 6 10 15一串串數覺得多熟悉的,就是想不起來那是組合數。最後只有80分 第二題算是基本想到了吧,但是忽略了乙個問題 我的想法是每行0的個數要麼是當...