【2018.4.7】模拟赛之六-ssl2387 树【图论,树】
生活随笔
收集整理的這篇文章主要介紹了
【2018.4.7】模拟赛之六-ssl2387 树【图论,树】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
大意
給出一個樹,每個節點都有值。如果一個節點加上val,那么他的子節點就得加上-val以此類推。有兩種操作:
(1)詢問一個節點的值
(2)一個節點的值加上一個數
解題思路
改變就計算到一個其他數組里,然后每次詢問就回到根節點,一路把標記順下來。
代碼
#include<cstdio> #include<cctype> using namespace std; int n,m,xx,yy,w[100001],lazy[100001],ques,ls[100001],father[100001],ans; char c; int in() {ans=0;c=getchar();if (!isdigit(c)) c=getchar();//ans=c-48;while (isdigit(c)){ans=ans*10+c-48;c=getchar();}return ans; } int updata(int k,int mov) {if (!k) return 0;return updata(father[k],-mov)+lazy[k]*mov;//回退計算 } int main() {freopen("tree.in","r",stdin);freopen("tree.out","w",stdout);n=in();m=in();for (int i=1;i<=n;i++){w[i]=in();}for (int i=1;i<n;i++){xx=in();yy=in();father[yy]=xx;}for (int i=1;i<=m;i++){scanf("%d",&ques);if (ques==2){xx=in();printf("%d\n",w[xx]+updata(xx,1));}else{xx=in();yy=in();lazy[xx]+=yy;}} }總結
以上是生活随笔為你收集整理的【2018.4.7】模拟赛之六-ssl2387 树【图论,树】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 疣怎么读 疣的读音
- 下一篇: ssl初一组周六模拟赛【2018.4.7