虛樹學習小結

2021-09-10 06:02:32 字數 1396 閱讀 3081

從一道模板題說起

void ins(int x)//注意與上面的區別

while (top>1&&dfn[s[top-1]]>=dfn[k])

add1(s[top-1],s[top]),top--;

if (s[top]^k)

add1(k,s[top]),s[top]=k;

s[++top]=x;

}void son(int x)

l1=d[con[x]];l2=d[con[v]];

if (l1>l2||(l1==l2)&&(con[x]>con[v])) con[x]=con[v]; }}

void fa(int x)

else

ans[con[a]]+=size[x]-size[y];

ans[con[b]]+=size[y]-size[b]; }}

int main()

} fo(i,1,q[0]) ans[con[q[i]]]+=rem[q[i]];

fo(i,1,n) printf("%d ",ans[b[i]]);

printf("\n");

fo(i,1,q[0]) ans[q[i]]=head[q[i]]=con[q[i]]=rem[q[i]]=0;

} return 0;

}後面的兩道題,可能會等哪天覆習虛樹的時候在做。

[sdoi2015]尋寶遊戲

[heoi2014]大工程

虛樹學習小結

其實虛樹這東西 不知道說什麼好 簡單易學呃 虛樹主要處理一種詢問總點數不超過o n 且每次詢問的那些點,在預處理之後,所求的值,只和他們,以及他們兩兩的lca有關 這裡有個顯然的結論,即m個點兩兩的lca不超過m 1個,將這m個點按dfs序排序之後相鄰兩點的m 1個lca就是這m個點兩兩的lca 建...

虛樹學習筆記

將關鍵點按dfs序排序後,所有關鍵點與相鄰關鍵點的lca合起來構成虛樹 通常還要加上整棵樹的根 虛樹至多有2k2k 個點。體現在實現中就是每次都pop若干點,並有機會push2個點。stk中存的是從根到當前點的遞迴棧中目前選入虛樹的點。stk中的點之間都未連邊 因為事實上關係還未確定 pop掉乙個點...

虛樹 學習筆記

水平不夠,學習來湊 又開了個天大的新坑 sdoi 2011 消耗戰 題目大意就是講 給出一棵樹,有邊權,然後給出k個查詢點,問從1號店不能到任何乙個查詢點的代價是多少.先考慮一下樹形動歸.dp i 表示從1不能到以i為根的子樹中的所有查詢點的最小代價 考慮維護乙個量,mins i 表示從1到i路徑最...