zoukankan      html  css  js  c++  java
  • HDU3794+字典树

    字典树;

    这里字典树用于存储dis这些数。。。然后对于某个数x来说,要使得它变大,就要找到一个与它能“合适”与它异或的数。

    View Code
      1 /*
      2 字典树+异或
      3 a^b = (a^c)^(b^c)
      4 */
      5 #include<stdio.h>
      6 #include<string.h>
      7 #include<stdlib.h>
      8 const int maxn = 100005;
      9 const int maxm = 31;
     10 int tree[ maxn*maxm ][ 2 ];
     11 int dis[ maxn ],vis[ maxn ];
     12 struct node{
     13     int u,next,val;
     14 };
     15 node edge[ maxn<<2 ];
     16 int cnt,head[ maxn ];
     17 int tree_index;
     18 
     19 void init(){
     20     memset( dis,0,sizeof( dis ));
     21     memset( vis,0,sizeof( vis ));
     22     cnt = 0;
     23     memset( head,-1,sizeof( head ) );
     24     memset( tree,-1,sizeof( tree ) );
     25 }
     26 
     27 void addedge( int a,int b,int c ){
     28     edge[ cnt ].u = b;
     29     edge[ cnt ].val = c;
     30     edge[ cnt ].next = head[ a ];
     31     head[ a ] = cnt++;
     32 }
     33 
     34 void dfs( int now ){
     35     for( int i=head[ now ];i!=-1;i=edge[ i ].next ){
     36         int u = edge[ i ].u;
     37         if( vis[ u ] == 0 ){
     38             vis[ u ] = 1;
     39             dis[ u ] = dis[ now ]^edge[ i ].val;
     40             dfs( u );
     41         }
     42     }
     43     return ;
     44 }//求出其他点到根的异或值
     45 
     46 int find_the_max( int aim ){
     47     int res = 0;
     48     int id = 0;
     49     for( int i=30;i>=0;i-- ){
     50         int one_bit = (aim>>i)&1;
     51         if( one_bit==0 ){
     52             if( tree[ id ][ 1 ]!=-1 ){
     53                 res += 1<<i;
     54                 id = tree[ id ][ 1 ];
     55             }
     56             else if( tree[ id ][ 0 ]!=-1 ) id = tree[ id ][ 0 ];
     57             else break;
     58         }
     59         else if( one_bit==1 ){
     60             if( tree[ id ][ 0 ]!=-1 ){
     61                 res += 1<<i;
     62                 id = tree[ id ][ 0 ];
     63             }
     64             else if( tree[ id ][ 1 ]!=-1 ) id = tree[ id ][ 1 ];
     65             else break;
     66         }
     67     }
     68     return res;
     69 }/*贪心,对于当前一个数x,异或某个数y之后变大,必须求一个数从高位到低位和x不同的。。*/
     70 
     71 void rebuild_tree( int aim ){
     72     int id = 0;
     73     for( int i=30;i>=0;i-- ){
     74         int one_bit = (aim>>i)&1;
     75         if( tree[ id ][ one_bit ]==-1 ){
     76             tree[ id ][ one_bit ] = tree_index++;
     77         }
     78         id = tree[ id ][ one_bit ];
     79     }
     80     return ;
     81 }//把dis[]变为2进制,存入字典数(从当前的tree_index开始存储)        
     82 
     83 void solve( int n ){
     84     int ans = 0;
     85     tree_index = 1;
     86     for( int i=0;i<n;i++ ){
     87         int tmp_ans = find_the_max( dis[ i ] );
     88         if( tmp_ans>ans ) ans = tmp_ans;
     89         rebuild_tree( dis[i] );
     90     }
     91     printf("%d\n",ans);
     92     return ;
     93 }
     94 
     95 int main(){
     96     int n;
     97     while( scanf("%d",&n)!=EOF ){
     98         int a,b,c;
     99         init();
    100         for( int i=0;i<n-1;i++ ){
    101             scanf("%d%d%d",&a,&b,&c);
    102             addedge( a,b,c );
    103             addedge( b,a,c );
    104         }
    105         
    106         vis[ 0 ] = 1;
    107         dfs( 0 );
    108         //for( int i=0;i<n;i++ )
    109         //    printf("dis[%d]=%d\n",i,dis[i]);
    110         solve( n );
    111         
    112     }
    113     return 0;
    114 }
    keep moving...
  • 相关阅读:
    Fiddler无法抓取HTTPS的问题,Fiddler证书无法安装终极解决方案,
    锤子手机做appium自动化测试时,运行脚本总是弹出警告框的问题
    jmeter4+win10+jdk1.8环境下,jmeter输入中文就卡死的问题
    jenkins构建邮件自动发送,测试邮件发送成功,构建项目邮件发送不成功的问题
    Jenkins安装部署
    Appium中wait_activity的使用以及XPATH定位
    Appium连接夜神模拟器,模拟手势点击(tap)
    Appium如何查看webview上元素
    Appium启动淘宝APP,输入搜索内容
    Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2999648.html
Copyright © 2011-2022 走看看