輸出 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 細胞都有且只有乙個輸出端,被稱為軸突,...