记录编号 428672 评测结果 AAAAAAAAAA
题目名称 词链 最终得分 100
用户昵称 GravatarkZime 是否通过 通过
代码语言 C++ 运行时间 0.037 s
提交时间 2017-07-26 00:06:23 内存使用 0.31 MiB
显示代码纯文本
# include <bits/stdc++.h>
using namespace std;

struct node { 
    bool cnt;
    node *ne[26];
    vector <int> cd;
    int dp;
    node() {;}
} *root;

void insert(char str[]) { 
    int i = 0, index;
    node *p = root;
    while(str[i]) { 
        index = str[i] - 'a';
        if(p->ne[index]) { 
            p = p->ne[index];
        } else { 
            p->cd.push_back(index);
            p = p->ne[index] = new node();
        }
        i++;
    }
    p->cnt = 1;
}

int dp(node *x) { 
    int mx = 0;
    int siz = x->cd.size();
    for(int i = 0; i < siz; i++) { 
        mx = max(mx, dp(x->ne[x->cd[i]]));
    }
    return mx + x->cnt;
}

char temp[55];

int main() { 
# ifndef LOCAL
    freopen("link.in", "r", stdin);
    freopen("link.out", "w", stdout);
# endif
    root = new node();
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) { 
        scanf("%s", temp);
        insert(temp);
    }
    printf("%d\n", dp(root));
}