UVA 11488 字典树
来源:互联网 发布:电脑的端口 编辑:程序博客网 时间:2024/05/17 22:22
题意:
题目链接:https://vjudge.net/problem/UVA-11488
给出n个串,找出一个串的集合,使得集合中所有串的最长公共前缀与集合元素的个数的乘积最大。
思路:
字典树简单应用
代码:
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 5e4 + 10;struct node { node *Next[2]; LL cnt;};LL ans;struct Trie { node *root; void init() { root = new node; root->Next[0] = root->Next[1] = NULL; } void insert(char *str) { node *p = root; int len = strlen(str); for (int i = 0; i < len; i++) { int id = str[i] - '0'; if (p->Next[id] == NULL) { node *q = new node; for (int j = 0; j < 2; j++) q->Next[j] = NULL; p->Next[id] = q; p = p->Next[id]; p->cnt = 1; } else { p = p->Next[id]; p->cnt++; } } } void erase(node *p) { for (int i = 0; i < 2; i++) { if (p->Next[i] == NULL) continue; erase(p->Next[i]); } delete p; } void dfs(node *p, int dep) { ans = max(ans, dep * (p->cnt)); for (int i = 0; i < 2; i++) { if (p->Next[i] == NULL) continue; dfs(p->Next[i], dep + 1); } }} trie;char str[MAXN];int main() { //freopen("in.txt", "r", stdin); int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); trie.init(); for (int i = 0; i < n; i++) { scanf("%s", str); trie.insert(str); } ans = 0; trie.dfs(trie.root, 0); printf("%lld\n", ans); trie.erase(trie.root); } return 0;}
阅读全文
0 0
- uva 11488 字典树
- UVA 11488 字典树
- uva 11488 - Hyper Prefix Sets(字典树)
- UVA 11488 Hyper Prefix Sets 字典树
- Uva 11488 Hyper Prefix Sets 字典树
- UVA 12937 字典树
- UVA 12506(字典树)
- UVa 1401 字典树+DP
- UVA 11732 链式字典树
- UVa 11488 Hyper Prefix Sets 字典树基础题
- uva 11488 - Hyper Prefix Sets(字典树)
- UVa 11488 Hyper Prefix Sets(字典树)
- UVA 11488 Hyper Prefix Sets(字典树)
- UVA 11488 Hyper Prefixs Sets(字典树Trie)
- UVA 11732 - strcmp() Anyone? 字典树
- UVa:1401 Remember the Word(字典树)
- UVA 11732 strcmp() Anyone?(字典树Trie)
- uva 11732 strcmp() Anyone? 字典树
- tomcat跨域访问配置
- 全局异常捕捉,以及一些小的知识点
- 利用伪元素和CSS3实现鼠标移入下划线向两边展开效果
- Windows安装Apache2.4
- HTTP 503 错误 – 服务不可用 (Service unavailable)
- UVA 11488 字典树
- arm-linux-gcc的使用
- 原生方式上传文件
- Java基础—网络编程【OSI/RM TCP/IP】【网络通信三要素】【UDP传输 & TCP传输】【DNS域名解析】
- 【网络流 最大流】【bzoj1458】士兵占领
- linux脚本—ubuntu开机启动
- SpringBoot学习笔记之Redis集成
- Python 嵌套循环
- 苹果iOS11正式版更新内容大全:史上变动最大