题目链接

Boruvka生成树算法

\(Boruvka\)算法就是先把每个点看作一个联通块,然后不断在联通块之间找最优的边进行合并。因为每次联通块的数量最少缩小一半。所以合并次数是\(log\)的
先把所有的点权挂到\(trie\)树上。然后对于每个联通块进行合并的时候。对于联通块中的每个点都去\(trie\)上搜索他能找到的最优秀的边。也就是说如果当前位置是\(1\)那么就搜索1子树,否则的话既要搜0子树,也要搜1子树。这样1子树是一定要搜的。所以把0子树变为1子树和0子树合并起来的结果。然后就可以搜索了。
还有一个问题就是。如果当前子树中的所有点都已经在这个联通块里了怎么办。所以统计出每棵子树中联通块编号的最大值和最小值。然后就可以知道当前子树中是不是还有不属于这个联通块里的点了。合并联通块之后再把每个点合并的联通块里的点所属的联通块修改一下就行了。
复杂度\(O((n+2^m)mlogn)\)

更优秀的做法

上面的做法代码长且思路复杂。有一种更好的做法。
先把所有权值相同的点连一条边。这样肯定会比较优秀。
然后考虑枚举最终答案中\(w[u]\&w[v]\)的值p。
因为\(x\&w[u] \leq w[u]\),倒着枚举p,然后找到一个点u使得\(w[u]\&p=p\)。然后从其他的等于满足\(w[v]\&p=p\)的点\(v\)中找一个与\(u\)不在同一个联通块里的点。将这两个点之间连边。贡献为\(p\)。
万一\(w[u]\&w[v]\)比\(p\)大呢。可以证明这是不可能的。因为p是倒着枚举的,如果\(w[u]\&w[v]>p\)那么肯定之前就连过边了。不会再连一次。
复杂度\(O(2^mm\alpha(n))\)

代码

/*
* @Author: wxyww
* @Date:   2019-01-21 15:46:58
* @Last Modified time: 2019-01-21 15:53:01
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<bitset>
using namespace std;
typedef long long ll;
const int N = 1000000 +10;
ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}
int p[N],fa[N];
ll ans;
int find(int x) {return fa[x] == x ? x :fa[x] = find(fa[x]);
}
void uni(int x,int y) {x = find(x),y = find(y);if(rand() & 1) fa[x] = y;else fa[y] = x;
}
int main() {   srand(time(0));int n = read(),m = read();for(int i = 1;i <= n;++i) {int x = read();if(p[x]) ans += x;p[x] = x;}int k = (1 << m);for(int i = 1;i <= k;++i) fa[i] = i;for(int i = (1 << m) - 1;i;--i) {for(int j = 0;j < m && !p[i];++j) p[i] = p[i | (1 << j)];int u = p[i];if(!u) continue;for(int j = 0;j < m;++j) {int v = p[i | (1 << j)];if(!v) continue;if(find(v) != find(u)) {ans += i;uni(u,v);}}}cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/wxyww/p/10299884.html

UOJ176 新年的繁荣相关推荐

  1. 一句话题解(20180210~)

    2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...

  2. 一流的产品,繁荣的生态,优质的服务,领先的市场,强大的组织 —2022新年寄语

    #<王文京董事长2022新年寄语>专题学习#https://ec.diwork.com/static/home.html#/announcement/details?target=pc&a ...

  3. 数据派新年寄语 | 新时代,新年好!

    关于2017 2017,是人工智能走向繁荣的一年.AI江湖风起云涌,无意的一颗石子则激起千层浪. AlphaGo2.0以3:0完胜柯洁 ▼ 它太完美我很痛苦,看不到任何胜利的希望. ---柯洁赛后哽咽 ...

  4. 对学校的希望和寄语_新年元旦寄语【三篇】

    [导语]元旦,即公历的1月1日,是世界多数国家通称的新年.元,谓始,凡数之始称为元:旦,谓日:元旦意即初始之日.元旦一词在我国文学作品中最早出现于<晋书>.以下是无忧考网为大家整理的新年元 ...

  5. 牛年2021新年海报该有的样子!

    在中国,生肖文化尤其繁荣,除了各种层出不穷却大同小异的新年海报外,还有各种生肖邮 票.纪念金币,只有你想不到的没有设计师做不到的. 话不多说,2021牛年海报素材模板来一波!先来感受一波牛年气氛吧! ...

  6. 星巴克2022新年限定特饮;丹麦蓝罐曲奇虎年春节礼盒;尊尼获加、督威啤酒等虎年限定 | 食品饮料新品...

    星巴克中国.丹麦蓝罐曲奇.尊尼获加.督威啤酒.VEDETT白熊啤酒.李锦记.北鼎等推出虎年春节限定和最新新品. 星巴克2022新年限定特饮 星巴克中国推出包含3款限定饮品在内的一系列春节主题产品,将国 ...

  7. 猴年快乐! 在UI设计中解密农历新年的象征意义

    新年快乐! 中国大陆在火猴年响起,我想借此机会向对立的拇指,灵活的尾巴和挥霍自己的粪便所带来的奇异的欢乐表示敬意. 就像西方网络上的圣诞节引起无休止的驯鹿矢量和jQuery驱动的雪一样,在农历新年前后 ...

  8. GUESS手表全新推出2022年农历新年系列

    上海2022年1月14日 /美通社/ -- 新春将近,GUESS手表隆重推出2022年农历新年系列.该系列手表在拥有GUESS品牌强烈设计辨识度的同时,融合了对过去温暖的回忆和对未来美好的期许,灵活创 ...

  9. 金牛来到,福气来到——TcaplusDB新年放送

    光阴似箭,2020转瞬间成为历史,牛年的钟声即将敲响,在此,TcaplusDB祝大家新的一年万事如意,牛年带给我们的福气,一定能让我们心想事成! 饮水思源,回顾过去的一年,我们深知,TcaplusDB ...

最新文章

  1. 第一次使用考试宝进行作业练习
  2. 关于Resin SSL支持的两个问题
  3. JavaScript开发规范 0.01版
  4. oracle12 官网文档,Oracle 21c 官方文档 发布了
  5. 三星手机Android9和10的区别,三星Galaxy S10+ VS 小米9 拍照深度对比评测:神仙打架...
  6. oracle 中文查询不到,使用PLSQL查询Oracle语句中文无法匹配问题解决
  7. 运行Python时出现SyntaxError: EOL while scanning string literal解决方法
  8. 《Windows服务器配置与管理》文件系统管理
  9. iis反向代理tomcat
  10. php ssl证书安装,PHPWAMP如何开启SSL,Apache下如何安装ssl证书?配置ssl证书很简单...
  11. react JSZip-压缩文件下载本地
  12. 综合影响力模型InfG算法
  13. V$LOGMNR_CONTENTS字段含义
  14. 亚马逊账号被关联能申诉得回来吗
  15. 2021年第六届数维杯B题 中小城市地铁运营与建设优化设计
  16. 讯飞实时语音转写 python3.6.1 可完美运行 解析返回的json字符串 输出所获语音文字
  17. 你也遇到JSONException:create instance error, null...问题啦?
  18. /dev/null 21 详解
  19. 运用计算机思维可以解决什么问题,计算机思维是能否解决生活中遇到的难题?...
  20. 基础第三-MySQL-多表查询-索引-事务笔记

热门文章

  1. 城联优品作为新力量初注入,相关上市公司股价应声上涨150%
  2. 往事如烟可否随风去?
  3. 不同朝向的房间,怎么选择舒适的墙布颜色?-江南爱窗帘十大品牌
  4. 如何把ACCESS的数据导入到Mysql中
  5. 关于英语PETS5备考的一些事
  6. jQuery选择器及jQuery基本操作
  7. SpringBoot高级教程(转)
  8. 图像转换为向量 matlab,matlab图像转换成图像块向量im2col
  9. cgb2107-day18
  10. php 反射类 解析注释,PHP通过反射类ReflectionClass::getDocComment 获取注释返回false解决...