HDU 6138 Fleet of the Eternal Throne
昨天多校的AC自动机入门题……
为什么我还要写AC自动机入门题呢,因为我太不甘心了……
题意:
给你很多个字符串,很多个询问。
每个询问两个数( a , b) ,表示询问第 ( a)个字符串和第( b)个字符串的最长的子串同时必须是某一个给定字符串的前缀。
思路:
这个真的是很简单的,建议AC自动机初学者写完 HDU 2222 后马上来写这题……
仔细思考,AC自动机建立在Tire图上,Trie图上的一个结点就代表了一个前缀。
所以我将所有字符串建立一个AC自动机,对于一个询问的两个字符串,我用一个set去记录第一个字符串所能到达的结点。第二个字符串去查询是否有相同结点。如果有,就说明有一个子串同时是某一个字符串的前缀。将当前答案与这个结点的深度进行比较就好了……
AC Code
#include