【CF888G】Xor-MST(最小生成树,Trie树)

题面

CF

洛谷

题解

利用\(Kruskal\)或者\(Prim\)算法都很不好计算。

然而我们还有一个叫啥来着?\(B\)啥啥的算法,就叫\(B\)算法吧。

思想是对于每个点找到一条最小边,并且将这条边连上,不难证明每次至少连上了\(n/2\)个点。

再将这些联通块看做一个点继续重复这个过程,时间复杂度是\(log\)级别的。

我们从高位往低位看,如果我们按照\(01\)分类,根据上述的过程,不难得到,如果\(01\)两个集合都存在的话,它们之间一定会连上一条边,并且\(01\)分类后的两个集合一定在内部形成联通块,这就很好办了,直接分治递归处理,每次拿\(Trie\)算一下\(01\)分类后两个集合之间边的最小值然后给连上就好。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 200200
#define pb push_back
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,a[MAX],tot;
struct Node{int ch[2];}t[MAX<<5];
void insert(int &x,int w,int p)
{
if(!x)x=++tot,t[x].ch[0]=t[x].ch[1]=0;
if(p==-1)return;
insert(t[x].ch[(w>>p)&1],w,p-1);
}
int Query(int x,int w,int p)
{
if(p==-1)return 0;int c=(w>>p)&1;
if(t[x].ch[c])return Query(t[x].ch[c],w,p-1);
else return Query(t[x].ch[c^1],w,p-1)^(1<<p);
}
ll Solve(vector<int> v,int p)
{
if(!v.size()||p==-1)return 0;
vector<int> d[2];int ret=0,rt;
for(int i:v)d[(i>>p)&1].pb(i);
if(d[0].size()&&d[1].size())
{
ret=1<<(p+1);rt=tot=0;
for(int i:d[0])insert(rt,i,30);
for(int i:d[1])ret=min(ret,Query(rt,i,30));
}
return ret+Solve(d[0],p-1)+Solve(d[1],p-1);
}
int main()
{
n=read();vector<int> a;
for(int i=1;i<=n;++i)a.pb(read());
printf("%I64d\n",Solve(a,30));
return 0;
}

【CF888G】Xor-MST(最小生成树,Trie树)的更多相关文章

  1. cf888G. Xor-MST(Boruvka最小生成树 Trie树)

    题意 题目链接 给出\(n\)点,每个点有一个点权\(a[i]\),相邻两点之间的边权为\(a[i] \oplus a[j]\),求最小生成树的值 Sol 非常interesting的一道题,我做过两 ...

  2. HDU 4825 Xor Sum (trie树处理异或)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  3. HDU4825 Xor Sum(贪心+Trie树)

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

  4. Xor - Trie树

    题目描述 求一棵带边权的树的一条最大 Xor 路径的值.这里的"路径"不一定从根到叶子结点,中间一段路径只要满足条件也可以. 输入格式 第一行,一个整数 N ,表示一颗树有 N 个 ...

  5. 【CF888G】Xor-MST Trie树(模拟最小生成树)

    [CF888G]Xor-MST 题意:给你一张n个点的完全图,每个点有一个权值ai,i到j的边权使ai^aj,求这张图的最小生成树. n<=200000,ai<2^30 题解:学到了求最小 ...

  6. [CF888G] Xor-mst (Trie 树,最小生成树)

    题目链接 Solution \(Trie\) 树 + 启发式合并. 考虑到是异或,于是按位贪心.让高位的尽量相同. 然后要计算每棵子树的代价,似乎并没有很好的方法?? 于是只能启发式合并. 对于每一个 ...

  7. usaco6.1-Cow XOR:trie树

    Cow XOR Adrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All o ...

  8. CF888G Xor-MST 生成树、分治、Trie树合并

    传送门 第一次接触到Boruvka求最小生成树 它的原版本是:初始每一个点构成一个连通块,每一次找到每一个连通块到其他的连通块权值最短的边,然后合并这两个连通块.因为每一次连通块个数至少减半,所以复杂 ...

  9. 51nod 1295 XOR key (可持久化Trie树)

    1295 XOR key  题目来源: HackerRank 基准时间限制:1.5 秒 空间限制:262144 KB 分值: 160 难度:6级算法题   给出一个长度为N的正整数数组A,再给出Q个查 ...

随机推荐

  1. Linux系列——安装双系统Ubuntu

    作为一个穷人,电脑破得不行却没钱换,怎么办呢,不如换个Ubuntu吧,没有Windows那么多后台应用,在我这台古董上稍微流畅一点. Linux有很多发行版,比较流行和适合入门的就是Ubuntu和De ...

  2. Cocos2dx源码赏析(1)之启动流程与主循环

    Cocos2dx源码赏析(1)之启动流程与主循环 我们知道Cocos2dx是一款开源的跨平台游戏引擎,而学习开源项目一个较实用的办法就是读源码.所谓,"源码之前,了无秘密".而笔者 ...

  3. centos6.9 安装完xampp 7.2.0后,执行/opt/lampp/lampp报错

    # /opt/lampp/lampp egrep: error while loading shared libraries: libc.so.6: cannot open shared object ...

  4. chattr和lsattr命令详解

    基础命令学习目录首页 原文链接:http://www.ha97.com/5172.html PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chat ...

  5. 凡事不求甚解,遇事必定抓瞎——PHP开发Apache服务器配置备忘录

    照此配置流程,绝对一路畅通,可保无虞. 昨天弄了个PHP小程序,想在本地跑一下测试,可是工作电脑没有安装环境,于是下载了一个wamp,一路畅通,Apache.Mysql.PHP就全有了.启动wamp服 ...

  6. Python20-Day04

    ##########迭代器.生成器和面向过程编程########## 一.迭代器 迭代器是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值: l = [1,2,3] cou ...

  7. “Hello World!”Final发布文案加美工

    文案: 大家好,我们是“Hello World!”团队,本次我将向大家简要介绍一下空天猎的final发布,在空天猎final发布中,我主要从以下两个方面向大家进行介绍,第一个方面是增加了敌方的boss ...

  8. TeamWork#3,Week5,Scrum Meeting 11.16

    到目前为止各方面工作已经基本完成,爬虫程序也调整完毕,正在等待全部整合. 成员 已完成 待完成 彭林江 完成爬虫结构调整 新爬虫与服务器连接 郝倩 完成爬虫结构调整 新爬虫与服务器连接 高雅智 重定位 ...

  9. Scrum Meeting 11.03

    成员 今日任务 明日计划 用时 徐越 休息     赵庶宏 编写功能说明书,servlet代码移植 servlet代码移植 3h 薄霖 阅读上一届相关代码,思考改进方法 学习安卓界面设计数据库管理 4 ...

  10. 20135234mqy

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java实验    班级:1352    姓名: mqy  学号:20135234 成绩:             指导教师 ...