bzoj 3881 [Coci2015]Divljak——LCT維護parent樹鏈并

題目:https://www.lydsy.com/JudgeOnline/problem.php?id=3881

對 S 建 SAM ,每個 T 會讓 S 的 parent 樹的鏈并答案+1;在 T 走每一步的時候,走到的節點用 LCT access 一下,就能找到該點到 parent 根的鏈。

給鏈打標記。在 access 的過程中,如果遇到已經打過這個 T 標記的點,就停止 access 。

注意實現的時候,在判斷 fa[x] 有沒有標記之前要先 splay(fa[x]) 。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ls c[cr][0]
#define rs c[cr][1]
using namespace std;
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
const int N=1e5+5,M=2e6+5,K=26;
int n,ps[N],tot=1,c[M][K],tc[M][K],fl[M],q[M];
int tim,dfn[M],fa[M],vl[M],tg[M],sta[M];
char s[M];
bool isrt(int x){return c[fa[x]][0]!=x&&c[fa[x]][1]!=x;}
void cz(int cr)
{if(!tg[cr])return; int w=tg[cr];tg[cr]=0;vl[ls]+=w; vl[rs]+=w;tg[ls]+=w; tg[rs]+=w;dfn[ls]=dfn[rs]=dfn[cr];///
}
void rotate(int x)
{int y=fa[x],z=fa[y],d=(x==c[y][1]);if(!isrt(y))c[z][y==c[z][1]]=x;fa[x]=z; fa[y]=x; fa[c[x][!d]]=y;c[y][d]=c[x][!d]; c[x][!d]=y;
}
void splay(int x)
{int top; sta[top=1]=x;for(int k=x;!isrt(k);k=fa[k])sta[++top]=fa[k];for(int i=top;i;i--)cz(sta[i]);for(int y=fa[x],z=fa[y];!isrt(x);rotate(x),y=fa[x],z=fa[y])if(!isrt(y))((y==c[z][0])^(x==c[y][0]))?rotate(x):rotate(y);
}
void access(int x)
{splay(x); if(dfn[x]==tim)return;int t=0;while(1){c[x][1]=t;if(!fa[x]){ tg[x]++;vl[x]++;dfn[x]=tim;return;}splay(fa[x]);//splay firstif(dfn[fa[x]]==tim){ tg[x]++;vl[x]++;dfn[x]=tim;return;}t=x; x=fa[x];}
}
void link(int x,int y){ fa[y]=x;}
int Ins()
{int cr=1,len=strlen(s+1);for(int i=1;i<=len;i++){int w=s[i]-'a';if(!tc[cr][w])tc[cr][w]=++tot;cr=tc[cr][w];}return cr;
}
void get_fl()
{int he=0,tl=0;for(int i=0,v;i<K;i++)if((v=tc[1][i])){q[++tl]=v;fl[v]=1;link(1,v);}else tc[1][i]=1;while(he<tl){int k=q[++he],pr=fl[k];for(int i=0,v;i<K;i++)if((v=tc[k][i])){ q[++tl]=v;fl[v]=tc[pr][i];link(tc[pr][i],v);}else tc[k][i]=tc[pr][i];}
}
void solve()
{tim++; int cr=1,len=strlen(s+1);for(int i=1;i<=len;i++){cr=tc[cr][s[i]-'a'];access(cr);}
}
int main()
{n=rdn();for(int i=1;i<=n;i++){ scanf("%s",s+1); ps[i]=Ins();}get_fl();int Q=rdn(),op,x;while(Q--){op=rdn();if(op==1){ scanf("%s",s+1); solve();}else{x=rdn(); x=ps[x];splay(x); printf("%d\n",vl[x]);}}return 0;
}

?

轉載于:https://www.cnblogs.com/Narh/p/10804518.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536486.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536486.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536486.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

介紹一下再Apache下的Tomcat負載均衡的一些使用問題

在負載均衡技術中&#xff0c;硬件設備是比較昂貴的&#xff0c;對于負載均衡的學習者如果不是在企業中應用或者是學員中學習&#xff0c;很少有機會能碰到實際操作的訓練。&#xff08;http://xz.8682222.com&#xff09;所以&#xff0c;很多朋友都會選擇軟件方面的設置進行研…

Java利器之UML類圖詳解

本文轉載自https://blog.csdn.net/xiehuimx/article/details/53427452。 前言UML&#xff08;Unified Modeling Language&#xff09;中文統一建模語言&#xff0c;是一種開放的方法&#xff0c;用于說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的制品的…

Material Design之AppBarLayout總結

CoordinatorLayout 官方文檔 CoordinatorLayout 是一個加強型的FrameLayout. CoordinatorLayout 主要用于兩種場景: 作為activity最外層布局 作為協調一個或多個具有特定交互的子view的父布局 子view之間的特定協調動作&#xff0c;通過app:layout_behavior指定&#xff0c;如…

Git和GitHub快速入門

Git入門 簡介 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的分布式版本控制系統。 工具 準備工具 Git下載地址&#xff1a;https://git-scm.com Git配置 配置的內容主要是&#xff1a;用戶名和郵箱 git config --global --add user.name <用…

團隊沖刺三

昨天我做了什么&#xff1f; 完成了登錄的布局文件&#xff0c;建立數據庫&#xff0c;建數據表&#xff0c;連接數據庫&#xff0c;將信息存儲。 遇到了什么問題&#xff1f; 數據庫存儲功能報錯 今天打算做什么&#xff1f; 解決昨天遺留的問題。轉載于:https://www.cnblogs.…

C語言進階——全局變量

全局變量 定義在函數外面的變量是全局變量 全局變量具有全局的生存期和作用域 它們與任何函數都無關 在任何函數內部都可以使用它們 全局變量初始化 沒有做初始化的全局變量會得到0值 指針會得到NULL值 只能用編譯時刻已知的值來初始化全局變量 它們的初始化發生在main函數之前…

為什么我不用ViewPager或RecyclerView來做上下滑切換

上下滑切換翻頁大概是這樣的效果&#xff1a; 目前網上有諸多如 “仿抖音上下滑...” “仿花椒映客直播...” 之類的技術分享&#xff0c;都有講述實現上下滑切換頁面的方案&#xff0c;其中以 ViewPager 和 RecyclerView SnapHelper 兩種方案為多&#xff0c;但是都有明顯的缺…

web項目上之深入理解Java國際化

作者&#xff1a;https://blog.csdn.net/yangbo787827967/article/details/81124439 假設我們正在開發一個支持多國語言的Web應用程序&#xff0c;要求系統能夠根據客戶端的系統的語言類型返回對應的界面&#xff1a;英文的操作系統返回英文界面&#xff0c;而中文的操作系統則…

Chrome運行時性能瓶頸分析

一&#xff0c;初探&#xff0c;根據現象發現問題 chrome的performance知道很久了&#xff0c;但總是沒有特別權威且跟上時代的學習資料&#xff0c;這次痛定思痛&#xff0c;直接看英文文檔&#xff0c;一點點把這塊啃掉&#xff0c;本筆記基于Chrome 59 step 1: 隱身模式打開…

vue-router之路由鉤子(八)

路由鉤子&#xff0c;即導航鉤子&#xff0c;其實就是路由攔截器&#xff0c;vue-router一共有三類&#xff1a;全局鉤子&#xff1a;最常用路由單獨鉤子組件內鉤子1、全局鉤子在src/router/index.js中使用&#xff0c;代碼如下&#xff1a;// 定義路由配置const router new V…

java第一 ++--

大的轉換小的自動轉換 byte -> short -> int -> long -> float -> double l 自動類型轉換 表示范圍小的數據類型轉換成范圍大的數據類型&#xff0c;這種方式稱為自動類型轉換 自動類型轉換格式&#xff1a; 范圍大的數據類型 變量 范圍小的數據類型值&#xf…

在加拿大讀大學被開除了,以后該怎么辦?

在加拿大讀大學被開除了&#xff0c;以后該怎么辦&#xff1f; 一天晚上正準備睡覺的時候&#xff0c;手機振動&#xff0c;打開一看&#xff0c;是一條微消息&#xff0c;“在加拿大讀大學被開除了&#xff0c;以后該怎么辦&#xff1f;”又一個留學生遇到的棘手問題。在國內上…

GO編程程序員修煉秘籍:十本經典書單

隨著BAT、今日頭條、京東、抖音等大型互聯網公司對Go語言的大范圍應用&#xff0c;帶動更多互聯網企業采取技術跟隨戰略&#xff0c;Go語言發展前景一片大好。5月20日工業和信息化部信息中心發布《2018中國區塊鏈產業白皮書》&#xff0c;Go語言與區塊鏈成為“數字中國”建設的…

AngularJs 冷兵器雜談

一、指令 scope.template中的dom屬性值可以直接用{{attr}}表達式取到scope中的屬性attrlink中attr.$observe可以監聽scope屬性attr的動態變化需要改變$scope上的屬性值時&#xff1a;$scope.$apply(function(){$scope.attr newValue }) 復制代碼二、服務 循環依賴&#xff08;…

02-print的用法

print的常用&#xff1a; print(hello world!)print(hello,world!) # 逗號自動添加默認的分隔符&#xff1a;空格。print(hello world!) # 加號表示字符拼接。print(hello,world,sep***) # 單詞間用***分隔。print(# * 20) # *號表示重復20遍。print(are you sure?, end)…

單田芳白眉大俠全320回下載

1、搜索“十方評書網”。 2、要下載那個評書家的選擇那個評書家。 3、然后選擇自己要下載的下載可以了。 轉載于:https://blog.51cto.com/14204019/2392323

pip模塊 redis、xlrd、xlutils、nnlog、requests

# import模塊的實質&#xff1a;把python文件執行一遍,# 導入模塊的順序&#xff0c;1、從當前模塊找&#xff0c;如果當前模塊沒有&#xff0c;2、就去python環境變量里面找 pip install redispip install xlrd pip install xlutilspip install nnlogpip install requests pip…

react.js基礎

現在最熱門的前端框架有AngularJS、React、Bootstrap等。自從接觸了ReactJS&#xff0c;ReactJs的虛擬DOM&#xff08;Virtual DOM&#xff09;和組件化的開發深深的吸引了我&#xff0c;下面來跟我一起領略ReactJs的風采吧~~ 文章有點長&#xff0c;耐心讀完&#xff0c;你會有…

第 11 章 日志管理 - 089 - 初探 ELK

在開源的日志管理方案中&#xff0c;最出名的莫過于 ELK 了。 ELK 是三個軟件的合稱&#xff1a;Elasticsearch、Logstash、Kibana。 Elasticsearch 一個近乎實時查詢的全文搜索引擎。Elasticsearch 的設計目標就是要能夠處理和搜索巨量的日志數據。 Logstash 讀取原始日志&…

【轉】Kotlin 新版來了,支持跨平臺!

作者&#xff1a;Tamic 原文鏈接&#xff1a;juejin.im/post/5cd8f9… 谷歌在今年的 I/O 大會上宣布&#xff0c;Kotlin 編程語言現在是 Android 應用程序開發人員的首選語言(谷歌宣布 Kotlin 成為安卓開發首選)。 還有一個好消息, Kotlin 1.3.30 正式發布&#xff0c;做了對ap…