POJ3630 Phone List 题解&代码

来源:互联网 发布:颜真卿大有而不自乎 编辑:程序博客网 时间:2024/06/14 15:16

第一次用vim写代码…感觉爽爽哒,终于明白很多代码为什么会有诡异的空格什么的…习惯
vim的快捷操作几乎全部是和单词相关,也就是说如果一句代码中间没有空格…vim的优势就完全消失了

在下的习惯一时半会改不过来…嘛,不过既然看到了其道理自然是要努力改的

裸的trie树,最后加上一遍dfs,dfs检验是不是有一条路径上同时有两个单词结尾,如果有输出NO,反之则反

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxl=100005;int T,n,tot,ch[maxl][20],flag[maxl],Flag;char s[20];int newnode(int x,int temp){    if(temp!=-1)ch[x][temp]=++tot;    for(int i=0;i<10;i++)ch[tot][i]=0;    flag[tot]=0;}void Insert(int len){    int x=0,p=0,temp;    while(p<len)    {        temp=s[p]-'0';        if(!ch[x][temp])newnode(x,temp);        x=ch[x][temp];        p++;    }    flag[x]=1;}void dfs(int x){    if(Flag)return;    if(flag[x]>1)Flag=true;    for(int i=0;i<10;i++)        if(ch[x][i])            flag[ch[x][i]]+=flag[x],dfs(ch[x][i]);}int main(void){    scanf("%d",&T);    while(T--)    {        Flag=false;        tot=0;        newnode(0,-1);        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%s",s);            Insert(strlen(s));        }        dfs(0);        if(Flag)printf("NO\n");        else printf("YES\n");    }    return 0;}
0 0