HDU 1671 静态trie(字典树)

来源:互联网 发布:广西都市频道网络电视 编辑:程序博客网 时间:2024/05/14 23:01
#include <iostream>#include <cstring>using namespace std;const int MAXNODE = 500000;const int BRANCH = 10;int tree[MAXNODE][BRANCH];int SIZE; //结点下标bool key[MAXNODE];//是否是某个单词bool Insert(char *str) {int node = 0; bool tof = false;for(int i = 0; str[i]; i++) {int c = str[i] - '0';if(tree[node][c] == -1) { //结点未被使用tree[node][c] = ++ SIZE;tof = true;memset(tree[SIZE], -1, sizeof(tree[SIZE]));}if(key[node])return false;node = tree[node][c];}key[node] = true;return tof;}void Trie() {memset(tree[0], -1, sizeof(tree[0]));SIZE = 0;}char str[15];int main(){int t, n;bool tof;scanf("%d", &t);while(t--) {memset(key, false, sizeof(key));Trie();tof = true;scanf("%d", &n);for(int i = 0; i < n; i++) {scanf("%s", str);if(tof) {tof = Insert(str);}}if(tof)puts("YES");else puts("NO");}return 0;}

原创粉丝点击