zoukankan      html  css  js  c++  java
  • 解题:CF1055F Tree and XOR

    题面

    树上路径是可以通过到根的路径和LCA差出来的,所以建立一棵Trie树按位贪心即可......吗?

    发现空间并不够,需要我们每层现建,要记录每个数和它异或答案之后在这一层插进去的编号

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define lli long long
     5 using namespace std;
     6 const int N=1e6+60;
     7 int n,rd,ch,tot;
     8 lli k,sz,ans,val[N];
     9 int a[N],b[N],siz[N],son[N][2]; 
    10 int ID(int nde,int sid)
    11 {
    12     if(!son[nde][sid])
    13         son[nde][sid]=++tot;
    14     return son[nde][sid]; 
    15 }
    16 void i207M()
    17 {
    18     for(int i=1;i<=tot;i++)
    19         son[i][0]=son[i][1]=siz[i]=0;
    20     tot=sz=ch=0;
    21 }
    22 int main()
    23 {
    24     scanf("%d%lld",&n,&k);
    25     for(int i=2;i<=n;i++)
    26         scanf("%d%lld",&rd,&val[i]),val[i]^=val[rd];
    27     for(int i=1;i<=n;i++) a[i]=b[i]=1;
    28     for(int i=62;~i;i--)
    29     {
    30         i207M();
    31         for(int j=1;j<=n;j++)
    32             siz[a[j]=ID(a[j],(val[j]>>i)&1)]++;
    33         for(int j=1;j<=n;j++)
    34             sz+=siz[son[b[j]][(val[j]>>i)&1]];
    35         if(sz<k) k-=sz,ch=1,ans+=1ll<<i;
    36         for(int j=1;j<=n;j++)
    37             b[j]=son[b[j]][((val[j]>>i)&1)^ch];
    38     } 
    39     printf("%lld",ans);
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    wtforms 钩子函数
    sqlalchemy 单表增删改查
    sqlalchemy 数据库操作
    flask wtforms组件
    python----------文件操作
    编码 编码的转化
    集合、深浅copy
    字典
    sort 、sorted、range、join方法 数字的正序、倒叙、翻转
    for循环
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/10458916.html
Copyright © 2011-2022 走看看