library2

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub goodstudyqaq/library2

:warning: structure/others/trie.hpp

Required by

Code

#pragma once
#include <bits/stdc++.h>
using namespace std;

struct TrieNode {
    vector<int> nxt;
    TrieNode() {}
    TrieNode(int char_size) {
        nxt.resize(char_size, -1);
    }
};

template <typename Node = TrieNode>
struct Trie {
   public:
    vector<Node> nodes;
    int root;
    int char_size;
    int margin;
    bool init = false;
    int node_cnt;
    Trie(int char_size, int margin, int node_size = -1) : char_size(char_size), margin(margin) {
        if (node_size != -1) {
            init = true;
            nodes.resize(node_size);
            node_cnt = 0;
        }
        root = new_node();
    }

    int new_node() {
        if (init) {
            nodes[node_cnt] = Node(char_size);
            return node_cnt++;
        } else {
            nodes.push_back(Node(char_size));
            return nodes.size() - 1;
        }
    }

    void add(const string &s) {
        int n = s.size();
        int now = root;
        for (int i = 0; i < n; i++) {
            const int c = s[i] - margin;
            if (nodes[now].nxt[c] == -1) {
                nodes[now].nxt[c] = new_node();
            }
            now = nodes[now].nxt[c];
        }
    }
};
#line 2 "structure/others/trie.hpp"
#include <bits/stdc++.h>
using namespace std;

struct TrieNode {
    vector<int> nxt;
    TrieNode() {}
    TrieNode(int char_size) {
        nxt.resize(char_size, -1);
    }
};

template <typename Node = TrieNode>
struct Trie {
   public:
    vector<Node> nodes;
    int root;
    int char_size;
    int margin;
    bool init = false;
    int node_cnt;
    Trie(int char_size, int margin, int node_size = -1) : char_size(char_size), margin(margin) {
        if (node_size != -1) {
            init = true;
            nodes.resize(node_size);
            node_cnt = 0;
        }
        root = new_node();
    }

    int new_node() {
        if (init) {
            nodes[node_cnt] = Node(char_size);
            return node_cnt++;
        } else {
            nodes.push_back(Node(char_size));
            return nodes.size() - 1;
        }
    }

    void add(const string &s) {
        int n = s.size();
        int now = root;
        for (int i = 0; i < n; i++) {
            const int c = s[i] - margin;
            if (nodes[now].nxt[c] == -1) {
                nodes[now].nxt[c] = new_node();
            }
            now = nodes[now].nxt[c];
        }
    }
};
Back to top page