題目
暫無版權
題解
這道題是一道離線dfs。
對於 4 x 操作,我們可以認為第 x 次操作做完後直接跳到了當前這次操作,用一條從 x 指向當前的邊。
這樣一來,若下一次操作為 4 x 操作,那麼肯定在第 x 次操作做完後就跳過去做掉了,所以不用管了。否則就繼續下乙個操作。
如果有多個操作從 x 開始怎麼辦?很明顯,每個操作做完我們都回溯一下就好了。4 x 操作的回溯不用管,其它三個很好弄。
每次的答案先用 answer 陣列記住,然後最後按順序輸出。
**
#include
#include
#include
#include
using namespace std;
const int maxn=2e3+5,maxq=3e5+5;
int n,m,q,tot,ans,sum[maxn],vis[maxn],mp[maxn][maxn],lnk[maxq],son[maxq],nxt[maxq],answer[maxq];
struct jsa[maxq];
int read()
while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}void add(int x,int y)
void dfs(int i)
answer[i]=ans;
for (int j=lnk[i];j;j=nxt[j]) dfs(son[j]);
switch (a[i].id)
}int main()
dfs(0);
for (int i=1;i<=q;i++) printf("%d\n",answer[i]);
return
0;}
可持久化專題(二) 可持久化陣列的實現
前言 呃,首先宣告,看這篇部落格前,最好先去學一學主席樹,畢竟可持久化陣列的實現是完全基於主席樹的 那些亂七八糟的玄學演算法請走開 l in klink link 主席樹詳見部落格可持久化專題 一 主席樹 可持久化線段樹 順便吐槽一句,可持久化陣列這個名字聽起來真的很智障。簡介 可持久化陣列支援單點...
可持久化Treap
本來是想寫一點題的,但是hfu最近讓我改鍵盤指法,原來都是亂打 手速蠻快就是錯的多 剛開始練手法真的煩躁,像我這種從來不用小指頭的 就寫個學習筆記吧.非教程向,只是懂了後寫點隨筆,練成指法說不定能來填坑.可持久化treap首先是基於非旋轉式treap的,如果要旋轉的話那麼就會破壞父子關係導致無法可持...
可持久化Treap
可持久化treap本質上市乙個二叉平衡樹,若不對其規則進行修改,中序遍歷後得出的序列是遞增的。void maintain o 計算結點o的size int lowcount key 比key所在位置小1 int uppercount key key所在的位置,如果有多個相同的key,選位置最大的 i...