当前位置: 首页 > news >正文

【学习笔记】CF1305 Kuroni and Antihype

想了一下,觉得还是发单篇的题解比较合理

怎么感觉这题之前做过

先抛开建边方式不管 这一步其实挺重要的,但是可能大多数人独立做这道题的时候都在想用位运算的性质,而没有想到分开考虑吧?,考虑新建000号节点,问题转化为如果aiand aj=0a_i\ \text{and}\ a_j=0ai and aj=0,那么存在i→ji\to jij的长度为aja_jaj的边,以及j→ij\to iji的长度为aia_iai的边,求以000为根节点的最大树形图。

观察发现边权和等于将每条边看成ai+aja_i+a_jai+aj求和后再减去∑ai\sum a_iai,因此无向图的生成树也对应一个树形图。

因此可以直接跑kruskal\text{kruskal}kruskal算法。从大到小枚举边权,然后枚举子集,注意一下细节应该可以通过。复杂度O(318)O(3^{18})O(318)时限开3s还是比较稳的

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int cnt[1<<18],vs[1<<18];
int n,m,fa[1<<18],a[1<<18];
ll res;
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);
}
void unionset(int x,int y){int u=find(x),v=find(y);if(u!=v){m-=cnt[u]+cnt[v]-1;res+=(ll)(cnt[u]+cnt[v]-1)*(x|y);fa[u]=v,cnt[v]=1;}
}
int main(){cin>>n;cnt[0]++;for(int i=0;i<1<<18;i++)fa[i]=i,vs[i]=0;for(int i=1;i<=n;i++){cin>>a[i],cnt[a[i]]++;}for(int i=(1<<18)-1;i>=0;i--){for(int j=i;j;j=(j-1)&i){if(cnt[j]&&cnt[i-j]){unionset(j,i-j);}}}for(int i=1;i<=n;i++)res-=a[i];cout<<res;
}
http://www.lryc.cn/news/38056.html

相关文章:

  • json-server单独使用或者在react中进行使用
  • 【6G 新技术】6G数据面介绍
  • 【AI绘图学习笔记】深度前馈网络(一)
  • 目标检测笔记合集
  • 《计算机网络》期末复习笔记
  • linux下安装SonarQube
  • MyBatis-Plus(狂神)
  • Python3实现写作
  • UEFI实战--------HII之uni文件
  • 基于Spring Boot集成MyBatis-3.5.9操作数据库
  • 了解国外SEO负面压制的现状与应对策略!
  • Yolov5-交通标志检测与识别
  • Linux内核Thermal框架详解五、Thermal Core(4)
  • gcc 编译的过程
  • Hadoop入个门
  • python 从0到批量下载某站视频
  • 【深度学习】神经网络和深度学习--卷积和池化的作用
  • 锦正茂风冷系列电源JCP-10-80的技术参数
  • Idea+maven+spring-cloud项目搭建系列--11-1 dubbo(zookeeper,nacos)注册中心
  • Python3入门教程||Python3 迭代器与生成器||Python3 函数
  • 快速幂算法
  • Hudi:问题总结(2)Flink-1.13.1消费kafka并插入hudi
  • Application工具方法
  • 电脑游戏怎么录屏?其实很简单,只需要简单3步
  • 【设计模式】go语言中的 [函数选项,单例,工厂,责任链] 常用的设计模式
  • 2017系统分析师案例分析真题背记内容
  • C++和C的区别
  • 【React教程】一、React简介
  • 运动蓝牙耳机什么牌子好,比较好的运动蓝牙耳机推荐
  • [深入理解SSD系列 闪存实战2.1] NAND FLASH特性串烧 | 不了解闪存特性,你能用好闪存产品吗?