• trie


     1 int trie[MX][26],tot=1;
     2 bool end[MX];
     3 void insert(char *str)
     4 {
     5     int len=strlen(str),p=1;
     6     FOR(k,1,len)
     7     {
     8         int ch=str[k]-'a';
     9         printf("%d ",ch);
    10         if(!trie[p][ch])trie[p][ch]=++tot;
    11         p=trie[p][ch];
    12     }
    13     end[p]=true;
    14 }
    15 bool search(char *str)
    16 {
    17     int len=strlen(str),p=1;
    18     FOR(k,1,len)
    19     {
    20         p=trie[p][str[k]-'a'];
    21         if(p==0) return false;
    22     }
    23     return end[p];
    24 }

    3764 @ POJ - xor-leongest Path

    跳转原OJ

     

     1 const int u=100010;
     2 int ver[2*u],edge[2*u],next[2*u],head[u],v[u],val[u*32],a[u*32][2],f[u];
     3 int n,tot,i,ans,x,y,z;
     4 
     5 void add(int x,int y,int z)
     6 {
     7     ver[++tot]=y; edge[tot]=z; next[tot]=head[x]; head[x]=tot;
     8 }
     9 
    10 void dfs(int x)
    11 {
    12     v[x]=1;
    13     for(int i=head[x];i;i=next[i])
    14         if(!v[ver[i]])
    15         {
    16             f[ver[i]]=f[x]^edge[i];
    17             dfs(ver[i]);
    18         }
    19 }
    20 
    21 void ins(int x,int y,int temp)
    22 {
    23     if(y<0) {val[x]=temp; return;}
    24     int z=(temp>>y)&1;
    25     if(!a[x][z]) a[x][z]=++tot;
    26     ins(a[x][z],y-1,temp);
    27 } 
    28 
    29 int get(int x,int y,int temp)
    30 {
    31     if(y<0) return val[x];
    32     int z=(temp>>y)&1;
    33     if(a[x][z^1]) return get(a[x][z^1],y-1,temp);
    34     else return get(a[x][z],y-1,temp);
    35 }
    36 
    37 int main()
    38 {
    39     while(cin>>n)
    40     {
    41         memset(head,0,sizeof(head));
    42         memset(f,0,sizeof(f));
    43         memset(v,0,sizeof(v));
    44         tot=0;
    45         for(i=1;i<n;i++)
    46         {
    47             scanf("%d%d%d",&x,&y,&z);
    48             x++,y++;
    49             add(x,y,z); add(y,x,z);
    50         }
    51         dfs(1); tot=1; ans=0;
    52         memset(a,0,sizeof(a));
    53         ins(1,30,0);
    54         for(i=1;i<=n;i++)
    55         {
    56             ans=max(ans,f[i]^get(1,30,f[i]));
    57             ins(1,30,f[i]);
    58         }
    59         cout<<ans<<endl;
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    Jmeter的两种录制脚本的方式
    【.NET】设置EntityFramework中decimal类型数据精度 [转]
    vscode格式化vue不换行
    mysql5.7 noinstall 安装 【转载】
    配置STP、RSTP以及负载均衡
    配置3层交换机VLAN间通信
    配置单臂路由
    配置DTP
    配置trunk
    配置VLAN
  • 原文地址:https://www.cnblogs.com/universeplayer/p/10658692.html
Copyright © 2020-2023  润新知