洛谷 P1481 魔族密码 字典树求最长词链所包括的单词数

搬运一个博主的图(懒得画图了)   简单标记了一下ans[],和代码对应 

可以看一下我主页,还有相关的字典树的求解


const int N = 2e3 + 10,T = 20;

struct Node
{
	int son[26];
}t[N * 80];

int n;
string s;
int idx;
LL ans[N];//以i结尾的单词个数

void insert(string s)
{
	int o = 0;
	for (int i = 0;i < s.size();i ++)
	{
		int y = s[i] - 'a';
		int &u = t[o].son[y];
		if (!u) u = ++idx;
		o = u;
	}
	ans[o] ++;//以o结尾的单词数++
}

void find(int o)
{
	//暴力全搜一遍字典树
	for (int i = 0;i < 26;i ++)
	{
		if (t[o].son[i])
		{
			ans[t[o].son[i]] += ans[o];
			find(t[o].son[i]);
		}	
	}
}

void solve()
{
	cin >> n;
	for (int i = 1;i <= n; i++)
	{
		cin >> s;
		insert(s);
	}	
	
	find(0);
	
	LL res = 0;
	for (int i = 1;i < N;i ++) res = max(res,ans[i]);
	
	cout << res << endl;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值