題目:
學習了學習了。
在sam上跑乙個合併,將兒子節點的可用數字合併到parent樹父親節點,在01字典樹上找異或最大值,再加上當前父親節點表示的長度(lcp)來更新答案。
很簡單明瞭的乙個思路,但是有乙個疑問,題目要求的是最長公共字首,眾所周知倒著建sam後樹上兩個節點的lcp就是其lca,那麼這麼一路向上合併,有很多時候我們走到的不是lca了,這種時候彷彿有不符合題意的嫌疑。
但是實際上,如果生成異或最大值的兩個字尾在同一顆子樹裡,他們生成的答案在其lca位置是最大的,在之後的非lca位置生成的答案只會更小(parent樹上表示的長度單調),不會影響到答案,而如果來自不同子樹,當前的節點就是lca了。
#include
using namespace std;
const
int maxn =
1e5+5;
int n, w[maxn]
;char s[maxn]
;struct trie
p = next[p]
[c];}}
intfind
(int p,
int x)
else
}return ans;
}int
merge
(int x,
int y)
next[x][0
]=merge
(next[x][0
], next[y][0
]); next[x][1
]=merge
(next[x][1
], next[y][1
]);return x;
}} trie;
struct sam
void
add(
int c)
if(p ==0)
else
else}}
}void
build()
for(
int i =
1; i <= sz; i++
)for
(int i =
1; i <= step[last]
; i++
)for
(int i =
1; i <= sz; i++
)int ans =0;
for(
int i = sz; i > root;
--i)
int maxw =0;
for(
auto j : v[e]
) trie.root[link[e]
]= trie.
merge
(trie.root[link[e]
], trie.root[e]);
ans =
max(ans, step[link[e]
]+ maxw);}
printf
("%d\n"
, ans);}
} sam;
intmain()
sam.
build()
;return0;
}
6 19學習筆記
一.什麼是css3?css3是css技術的公升級版本,css即層疊樣式表 cascading stylesheet 在網頁製作時採用層疊樣式 表技術,可以有效地對頁面的布局 字型 顏色 背景和其 它效果實現更加精確的控制。只要對相應的 做 些簡 單的修改,就可以改變同一頁面的不同部分,或者頁數不同 ...
d619 奇摩知識
內容 不爽寫程式的小光,轉換地方,開始為奇摩知識 奉獻,突然與腿肌同學,發現了某個人所提出來的問題,並展開激烈的討論,最後終於.不過此問題,是某個測試系統的題目.有意義的消音,多半是髒話.題目描述 大家都知道二進位制是由0和1兩種數字組成的,十進位制轉二進位制,小明現在要玩乙個遊戲,就是由1數到n,...
COGS 619 傳話 解題報告
janis 問題描述 興趣小組的同學來自各個學校,為了增加友誼,晚會上又進行了乙個傳話遊戲,如果 a 認識 b 那麼 a 收到某個訊息,就會把這個訊息傳給 b 以及所有 a 認識的人。如果 a 認識 b b 不一定認識 a 所有人從 1 到 n 編號,給出所有 認識 關係,問如果 i 發布一條新訊息...