您的位置:首页 > 其它

poj3630 字典树

2014-04-08 13:23 169 查看
静态建树,空间开大点,动态会超时,其他没什么好说的。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int T[100000][10];
int v[100000][10];
int sz;
bool a;

void init()
{
    memset(T[0],0,sizeof(T[0]));
    memset(v,0,sizeof(v));
    sz=1;
    a=1;
}

int idx(char c)
{
    return c-'0';
}

void insert(char * s)
{
    int l=strlen(s);
    int u=0,t;
    for (int i=0;i<l;i++)
    {
        t=idx(s[i]);
        if (T[u][t]==0)
        {
            memset(T[sz],0,sizeof(T[sz]));
            T[u][t]=sz++;
        }
        u=T[u][t];
        if (v[u][t]==1)
            a=0;

    }
    if (T[u][t]!=0)
        a=0;
    v[u][t]=1;
}

int main()
{
    int r;
    cin>>r;
    while (r--)
    {
        int n;
        init();
        cin>>n;
        char s[15];
        for (int i=1;i<=n;i++)
        {
            scanf("%s",s);
            insert(s);
        }
        if (a)
            printf("YES\n");
        else
            printf("NO\n");
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: