SHOI2014 三叉神經樹

2022-07-13 19:48:15 字數 2154 閱讀 8538

題目描述

計算神經學作為新興的交叉學科近些年來一直是學術界的熱點。一種叫做shoi 的神經組織因為其和近日發現的化合物 shtsc 的密切聯絡引起了人們的極大關注。

shoi 組織由若干個 shoi 細胞構成,shoi 細胞之間形成嚴密的樹形結構。每個 shoi 細胞都有且只有乙個輸出端,被稱為軸突,除了乙個特殊的、被稱為根細胞的 shoi 細胞的輸出作為整個組織的輸出以外,其餘細胞的軸突均連向其上級 shoi 細胞;並且有且只有三個接收端,被稱為樹突,從其下級細胞或者其它神經組織那裡接收資訊。shoi 細胞的訊號機制較為簡單,僅有 00和 11兩種。每個 shoi 細胞根據三個輸入端中 00和 11訊號的多寡輸出較多的那一種。

現在給出了一段 shoi 組織的資訊,以及外部神經組織的輸入變化情況。請你模擬 shoi 組織的輸出結果。

題解

身體啊。

先考慮每一次修改能影響到的範圍,這個比較簡單,只能是這個點到根的路徑上的所有點。

再次進一步的考慮,發現能夠影響到的範圍是一段連續的區間。

考慮為什麼題目中給的是一顆每個點有三個兒子的樹?如果乙個節點時是1,那麼它的1的兒子樹時2或3,也就是d>>1=1,所以我們判斷乙個節點是否是被啟用的就可以用度數/2來判斷。

然後考慮某個葉子從1->0的時候,那麼有修改的就是從這個葉子往上連續的一段2,和第乙個不是2的點。

反之就是往上連續一段1和第乙個不是1的點。

這是乙個非常重要的性質,有了這個性質之後就可以二分最靠下的不是1/2的點,用&*%*#資料結構維護一下。

題解給的lct做法非常喵。

我們不用二分,直接在lct每個節點維護當前鏈中深度最深的不是1/2的點。

但是有個問題,這是一顆有根樹,我們不能makeroot。

那麼如何提取一條鏈?

假設我們的葉子為x,鏈頂為y,那麼access&&splay(x)之後,當前的splay就是從葉子到根的一條鏈。

然後再splay(y)此時y的右子樹就是我們要的鏈了。

我的寫法如果第乙個不是1/2的點是根的話要特判,為啥網上的題解都不同特判啊。。

**

#include#include

#include

#define n 500009

#define ls ch[x][0]

#define rs ch[x][1]

using

namespace

std;

queue

q;int ch[n][2],fa[n],v[n*3],rev[n],n1[n],n2[n],n,f[n*3

],du[n];

typedef

long

long

ll;inline ll rd()

while(isdigit(c))

return f?-x:x;

}inline

bool ge(int x)

inline

bool isroot(int x)

inline

void pushup(int

x)inline

void rotate(int

x)inline

void pushdown(int x,int

tag)

void _pushdown(int

x)inline

void splay(intx)}

inline

void access(int

x)int

main()

for(int i=n+1;i<=3*n+1;++i)v[i]=rd(),v[f[i]]+=v[i];

for(int i=1;i<=n;++i)if(!du[i])q.push(i);

while(!q.empty())

int ans=0

,qu;

ans=v[1]>>1

; qu=rd();

while(qu--)

else

if(ta==-1&&n2[x])

else

if(ans)puts("

1");else puts("0"

); }

return0;

}

SHOI2014 三叉神經樹

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

SHOI2014 三叉神經樹 LCT

題面 loj 2187 解析 顯然修改一次需要修改一條到根的鏈,維護鏈當然就想到用lct了 結果就想偏了,本來想分別維護虛子樹資訊與整棵子樹資訊,結果發現很難維護。然後去自學了一發 我們定義乙個點的點權為它的兒子節點中選 1 的個數 考慮更改乙個點的點權要麼對它上方的鏈中連續的 1 或連續 2 因此...

SHOI2014 三叉神經樹 題解

lct 一顆節點數為 3n 1 的樹,編號在 1 dots n 的節點有且僅有三個兒子。其餘點沒有兒子。所有節點值只可能為 0 或 1 編號在 n 1 dots 3n 的節點的值由輸入確定,編號在 1 to n 的節點的值為三個兒子中值數量更多的那種。m 次操作,每次會改變乙個 n 1 dots 3...