CF888G Xor-MST

题意翻译

给定一个\(n\)个节点的完全图,每个节点有个编号\(a_i\),节点\(i\)和节点\(j\)之间边的权值为\(a_i\ xor\ a_j\),求该图的最小生成树的权值和。

说明

\(1\le n \le 200000,0\le a_i< 2^{30}\)


有一种B开头的MST算法

大致流程是这样的

当前每个集合伸出去一条最短的边,然后把联通块缩成一个新的集合,因为每次缩集合个数减半,所以复杂度对。

事实上基本不会让我们真去写它,有时候需要用这种方法或者思想处理处MST。

比如这个题就可以这么做,每次合并实际上对trie树做启发式合并,然后在里面查一下最小值。

然后有一种神奇的思路,这里sto attack巨佬

发现每次合并的集合都是最高位的1不同的两个集合进行合并,于是可以从上往下做,从最高位把集合分开,然后查询两个集合的最小连边。

如果我们把所有元素按从小到大排序加入trie,那么一个集合内的元素就在一个连续的区间里啦

这样我们就可以非常方便的直接遍历一遍字典树统计出答案了


Code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using std::min;
using std::max;
const int N=2e5+10;
const int inf=0x3f3f3f3f;
#define ls ch[now][0]
#define rs ch[now][1]
int L[N*40],R[N*40],ch[N*40][2],tot;
int n,a[N],root;
void Insert(int &now,int x,int dep)
{
if(!now) now=++tot;
L[now]=min(L[now],x),R[now]=max(R[now],x);
if(dep<0) return;
int bit=a[x]>>dep&1;
Insert(ch[now][bit],x,dep-1);
}
int query(int now,int val,int dep)
{
if(dep<0) return 0;
int bit=val>>dep&1;
if(ch[now][bit]) return query(ch[now][bit],val,dep-1);
else return query(ch[now][bit^1],val,dep-1)+(1<<dep);
}
ll dfs(int now,int dep)
{
if(dep<0) return 0;
if(R[ls]&&R[rs])
{
int mi=inf;
for(int i=L[ls];i<=R[ls];i++) mi=min(mi,query(rs,a[i],dep-1));
return dfs(ls,dep-1)+dfs(rs,dep-1)+mi+(1<<dep);
}
if(R[ls]) return dfs(ls,dep-1);
if(R[rs]) return dfs(rs,dep-1);
return 0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",a+i);
std::sort(a+1,a+1+n);
memset(L,0x3f,sizeof(L));
for(int i=1;i<=n;i++) Insert(root,i,30);
printf("%lld\n",dfs(root,30));
return 0;
}

2019.1.4

CF888G Xor-MST 解题报告的更多相关文章

  1. HDU4825:Xor Sum 解题报告(0/1 Trie树)

    Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数. 随后 Prometheus 将向 Ze ...

  2. 人生第一场CTF的解题报告(部分)

    解题报告 濮元杰部分: 王者归来: 120 场景 小王入职了一段时间,最近有点无聊.Web安全项目不多,白天看着其他项目组的同事忙得热火朝天,小王有点坐不住了,这也许是新人都会有的想法,乐于助人.想到 ...

  3. 冲刺Noip2017模拟赛5 解题报告——五十岚芒果酱

    1. 公约数(gcd) [问题描述] 给定一个正整数,在[,n]的范围内,求出有多少个无序数对(a,b)满足 gcd(a,b)=a xor b. [输入格式] 输入共一行,一个正整数n. [输出格式] ...

  4. ZROI Day1 比赛解题报告

    ZROI Day1 比赛解题报告 版权原因不提供题面相关信息 序 前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3, 发现T3暴力很好打,T2想了一想可 ...

  5. 【剑指Offer】数组中只出现一次的数字 解题报告(Python)

    [剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  6. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  7. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  8. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  9. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  10. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

随机推荐

  1. 避免写慢SQL

    最近在整理数据库中的慢SQL,同时也查询了相关资料.记录一下,要学会使用执行计划来分析SQL. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且 ...

  2. AndroidStudio怎样导入library项目开源库 - 转

    https://jingyan.baidu.com/article/1974b2898917aff4b1f77415.html

  3. 20155202 张旭《网络对抗》Exp2 后门原理与实践

    20155202 张旭<网络对抗>Exp2 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 捆绑在软件中 注入在可执行文件里 注入在office文件的宏里面 ...

  4. 利用OVS+FLOODLIGHT,为数据表添加VLAN_ID和MPLS

    话不多说,直接上拓扑: 我这里是用主机h1 (10.0.0.1)ping 主机h2(10.0.0.2) 1.添加VLAN标签 v1: sudo ovs-ofctl add-flow m1-s1 in_ ...

  5. django在admin后台注册自己创建的数据库表

    django在admin后台注册自己创建的数据库表,这样我们就可以在admin后台看到表结构信息,我们就可以在admin后台快速录入表记录信息 如果没有注册,那么你在登录django自带的admin的 ...

  6. 如何用istio实现请求超时管理

    前言 在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过 ...

  7. 1065 A+B and C

    同样是一题会产生溢出的题,不同的是这个用大数类很麻烦,因为有负数的可能性 不妨利用溢出的特性来解题:两个整数和为负数 或者 两个负数和为正数,那么就溢出了. #include<bits/stdc ...

  8. 基于tensorflow 1.x 的检索机器人chatbot-retrieval

    Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...

  9. EOS 权限管理之-权限的使用

    首先,跟大家说声抱歉,由于之前一直在准备EOS上线的一些工作,所以,很长时间没有更新内容.今天正好有时间,也想到了一些题材,就来说一下这个话题.本文完全是个人见解,如有不当之处,欢迎指出. 前提回顾: ...

  10. wordpress学习三:wordpress自带的模板学习

    在<学习二>里,大概说了下怎么去查找模板,本节我们以一个简单的模板为例子,继续说说wordpress的模板机制,看看做一个自己的模板需要哪些知识点. 页面模板渲染 wordpress的模板 ...