SHTSC2014 三叉神經樹

2021-08-15 07:57:22 字數 2279 閱讀 2980

輸出 q行每乙個整數,對應第 i次外界輸入變化後的根細胞的輸出。

給一棵根為1的三叉(傻叉神經樹)樹,非葉子節點必有三個兒子,每個節點會儲存01資訊,每次只改變乙個葉子節點的資訊,某非葉子節點的01值會相應改變,取值為三個兒子的資訊中較多的那個

比如,某節點x三個兒子資訊為011,則x的資訊為1

問每次改變後根的資訊。

同一場比賽中,好像只會做這題。。。

8000ms好大,n=500000,lo

g2l og

2??

想想先。

記乙個節點x的資訊為1的兒子個數,t[x]

當t[x]>1時x的資訊為1反之為0。

考慮某個t[x]的改變

0->1,由於原本x不對fa[x]產生貢獻,改變後t[fa[x]]不會加1,改變不會上傳

1->2,原本對fa[x]無貢獻,改變後因為t[x]>1,t[fa[x]]++,改變上傳

2->3,原本對fa[x]已有貢獻,改變後t[x]依然大於1,t[fa[x]]不會加1,改變不上傳

3->2,由於原本x對fa[x]產生貢獻,改變後t[x]依然大於1,t[fa[x]]不會減1,改變不會上傳

2->1,原本對fa[x]有貢獻,改變後因為t[x]<2,t[fa[x]]–,改變上傳

1->0,原本對fa[x]已沒有貢獻,改變後t[x]依然小於2,t[fa[x]]不會減1,改變不上傳

經過這樣分析可得:

每次某個葉子的改變,只會影響到它father開始,連續一段為1(或2)的點及其頂端的father

用樹鏈剖(刨)分或lct(個人推薦,更快)即可。

#include

#include

#define n 1500100

using

namespace

std;

int fa[n],pre[n],son[n][2],val[n],add[n],up[4][n],sta[n],n,q,siz[n],stack[n],t;

int pd(int x)

void update(int w)

}void rotate(int x)

void inc(int x,int k)

void down(int x)

void rel(int x,int e)

void splay(int x,int e)

void access(int x)

}void link(int x,int y)

int kth(int x,int k)

}void turn1(int x)

}void turn0(int x)

}int main()

for(int i=n+1;i<=3*n+1;i++)

scanf("%d",&q);

for(int i=1;i<=q;i++)

fclose(stdin);fclose(stdout);

return

0;}

SHTSC2014 三叉神經樹

計算神經學作為新興的交叉學科近些年來一直是學術界的熱點。一種叫做shoi 的神經組織因為其和近日發現的化合物 shtsc 的密切聯絡引起了人們的極大關注。shoi 組織由若干個 shoi 細胞構成,shoi 細胞之間形成嚴密的樹形結構。每個 shoi 細胞都有且只有乙個輸出端,被稱為軸突,除了乙個特...

SHOI2014 三叉神經樹

給你一顆由 n 個非葉子結點和 2n 1 個葉子結點構成的三叉樹,每個結點兒子個數為 0 3 每個葉子結點有乙個輸出 0 或 1 每個非葉子結點的輸出為自己的葉子結點中較多的那一種狀態。有 q 次修改操作,每次修改乙個葉子結點的輸出,求每次修改後根結點的輸出。n leq 5 times 10 5,q...

SHOI2014 三叉神經樹

題目描述 計算神經學作為新興的交叉學科近些年來一直是學術界的熱點。一種叫做shoi 的神經組織因為其和近日發現的化合物 shtsc 的密切聯絡引起了人們的極大關注。shoi 組織由若干個 shoi 細胞構成,shoi 細胞之間形成嚴密的樹形結構。每個 shoi 細胞都有且只有乙個輸出端,被稱為軸突,...