日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 4117 GRE Words

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 4117 GRE Words 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這道題不難想到這樣的dp。

dp[字符串si] = 以si為結尾的最大總權值。

dp[si] = max(dp[sj]) ,1.j < i,2.sj是si的子串。

對于第二個條件,是一個多模版串匹配的問題,可以用AC自動機。

預先O(m)把AC自動機建好,然后動態更新AC自動機上的dp值,

匹配的時候,指向字符的指針移動總共是O(m),

而每個單詞,fail指針走尋找后綴卻是O(m),即使改成后綴鏈接也是O(n)。too slow!

找到一個單詞后,需要避免找后綴,動態維護這個單詞的dp值。

一開始所有單詞的dp都是0。

更新的時候,dp[si]需要更新所有dp[sj],其中si是sj的后綴。

如果父節點是子節點的后綴,把所有的單詞(包括空后綴)連接起來將會得到以空字符串為根的后綴鏈接樹。

這樣就變成一個更新子樹的問題,dfs把樹形轉成線性以后可以用線段樹來維護。

詢問單點最大值,區間更新O(logn)。

復雜度O(mlogn)

潛在的坑點:

1.Trie個結點可能對應多個單詞,如果只更新了其中一個單詞的線性區間RE...(map,前向鏈表,vector都可以搞

?

/********************************************************* * ------------------ * * author AbyssFish * **********************************************************/ #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std;const int LEN = 3e5+5; const int MAXN = 2e4+5;int W[MAXN], S[MAXN]; int N; char s[LEN];int hd[LEN]; int nx[MAXN], to[MAXN], ec;void add_e(int u,int v) {to[ec] = v;nx[ec] = hd[u];hd[u] = ec++; } #define eachedge int i = hd[u]; ~i; i = nx[i] inline void init_g(int n){ memset(hd,-1,n<<2); ec = 0; } int L[MAXN], R[MAXN], dfs_clk; //string's linear suffix link tree id const int ST_SIZE = 1<<16; int dp[ST_SIZE];#define para int o = 1,int l = 0,int r = dfs_clk #define lo (o<<1) #define ro (o<<1|1) #define Tvar int md = (l+r)>>1; #define lsn lo,l,md #define rsn ro,md,r #define insd ql<=l&&r<=qrvoid build(para) {dp[o] = 0;if(r-l>1){Tvarbuild(lsn);build(rsn);} }void update(int ql,int qr,int v,para) {if(insd){dp[o] = max(dp[o],v);}else {Tvarif(ql < md) update(ql,qr,v,lsn);if(qr > md) update(ql,qr,v,rsn);} }int query(int p,para) {int re = 0;while(r-l>1){Tvarif(p<md){o = lo; r = md;}else {o = ro; l = md;}re = max(re,dp[o]);}return re; }const int sigma_size = 26, MAXND = LEN; struct AhoCorasick_automata {#define idx(x) (x-'a')int ch[MAXND][sigma_size];int f[MAXND];int last[MAXND];int cnt;int val[MAXND];int nx_val[MAXN];void add_v(int o,int x){nx_val[x] = val[o];val[o] = x;}int newNode(){int i = ++cnt;memset(ch[i],0,sizeof(ch[i]));val[i] = 0;return i;}void init(){cnt = -1; newNode();}int add(char *s,int id){int u = 0, i, c;for(i = 0; s[i]; i++){c = idx(s[i]);if(!ch[u][c]){ch[u][c] = newNode();}u = ch[u][c];}add_v(u,id);return i;}queue<int> q;void getFail(){int u, c, v, r;//f[0] = 0; last[0] = 0;for(c = 0; c < sigma_size; c++){u = ch[0][c];if(u){q.push(u);f[u] = 0;last[u] = 0;}}while(!q.empty()){r = q.front(); q.pop();for(c = 0; c < sigma_size; c++){u = ch[r][c];if(u){q.push(u);v = f[u] = ch[f[r]][c];last[u] = val[v] ? v : last[v];}else ch[r][c] = ch[f[r]][c];}}}void dfs(int u){int le = dfs_clk++;for(eachedge){dfs(to[i]);}int ri = dfs_clk;for(int id = val[u]; id; id = nx_val[id]){L[id] = le; R[id] = ri;}}void buildTree(){init_g(cnt+1);for(int u = 1; u <= cnt; u++)if(val[u]){add_e(last[u],u);}dfs_clk = 0;dfs(0);}void work(){int i,j,c,u,id;int ans = 0, mx;build();for(i = 1; i <= N; i++){u = 0; mx = 0;for(j = S[i-1]; j < S[i]; j++){c = idx(s[j]);u = ch[u][c];if(val[u]){id = val[u];mx = max(mx, query(L[id]));}else if(last[u]){id = val[last[u]];mx = max(mx, query(L[id]));}}if(W[i] > 0){ans = max(ans, mx += W[i]);update(L[i],R[i],mx);}}printf("%d\n",ans);}}ac;void solve() {scanf("%d",&N);ac.init();for(int i = 1; i <= N; i++){scanf("%s%d",s+S[i-1],W+i);S[i] = ac.add(s+S[i-1],i)+S[i-1];}ac.getFail();ac.buildTree();ac.work(); }//#define LOCAL int main() { #ifdef LOCALfreopen("data.txt","r",stdin); #endifint T, kas = 0; scanf("%d",&T);while(++kas <= T){printf("Case #%d: ",kas);solve();}return 0; }

?

轉載于:https://www.cnblogs.com/jerryRey/p/5051900.html

總結

以上是生活随笔為你收集整理的HDU 4117 GRE Words的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品一区二区三区精华液 | 欧av在线| 78m78成人免费网站 | 日本三级中文字幕 | 人妻激情偷乱频一区二区三区 | av观看在线免费 | 久久精品人妻av一区二区三区 | www.黄色.| 成人欧美一区二区三区黑人免费 | 欧美日韩一区二区区别是什么 | 亚洲午夜一区二区三区 | av手机在线观看 | 国产超级av | 综合色视频 | 精品黄色在线观看 | 亚洲石原莉奈一区二区在线观看 | 欧美日韩精品一区二区在线观看 | 天天插天天操天天干 | 国产一区二区啪啪啪 | 国产一区二区在线视频观看 | 精品欧美一区二区三区 | 牛牛影视一区二区 | 成人导航网站 | 日韩不卡在线 | 大尺度电影在线 | 久久久噜噜噜久久久 | 久久青青操 | 污污免费观看 | 草久在线视频 | 精品无码人妻少妇久久久久久 | 久久成人免费网站 | 色妞网| 97黄色网 | 国产97av | 国产福利91精品 | 亚洲欧洲一区二区 | 做a爰小视频 | 亚洲欧美激情一区二区三区 | 人妻无码中文字幕 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久午夜无码鲁丝片 | 久久久久久久国产视频 | 国产女大学生av | 在办公室被c到呻吟的动态图 | 中文字幕在线日亚洲9 | 情侣作爱视频网站 | 又黄又爽视频 | 99自拍 | 亚洲午夜在线 | 国产精品国产三级国产专区51区 | 色老头一区二区三区在线观看 | 国产精品一区二区人妻喷水 | 在线不卡毛片 | 国产丝袜视频在线观看 | 中文字幕无码精品亚洲35 | 水果派解说av | 牛牛影视av | 欧美老熟妇xb水多毛多 | 开心激情久久 | www.天天干 | 天堂福利视频 | 另类小说婷婷 | 国产婷婷色一区二区 | 狠狠操人人干 | 7x7x7x人成影视| 麻豆视频免费 | a级片毛片| 成人毛片100部免费看 | 麻豆自拍偷拍 | 国产男女视频 | 欧美日韩午夜爽爽 | 亚洲春色在线 | 性欧美精品中出 | 内射一区二区三区 | 免费观看美女裸体网站 | 欧美黄色网 | 中文字幕欧美另类精品亚洲 | 欧美日韩国产精品一区二区 | 亚洲天堂日韩在线 | 懂色av粉嫩av蜜乳av | 国产女人呻吟高潮抽搐声 | 久操视频在线观看免费 | 久久国产91 | 超碰视屏 | 99精品区 | 桃色一区二区 | 色奇米| 成人免费无码大片a毛片抽搐色欲 | 美女搡bbb又爽又猛又黄www | 久久夜色av | 中文字幕免费播放 | 中国av毛片 | 亚洲日本香蕉 | 亚洲人精品 | 日本一区不卡视频 | 日韩一区二区a片免费观看 伊人网综合在线 | 久久久久久精 | 日韩精品免费观看 | 亚洲开心网 |