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

2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal

题目描述

给定一张nnn个点的无向完全图,其中两点之间的路径边权为两点编号的按位与(编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)),即w(u,v)=u&v(1≤u,v≤n)w\left(u, v \right )=u\&v \left( 1 \le u, v \le n \right)w(u,v)=u&v(1≤u,v≤n),求该图最小生成树的边权和。

输入描述:

本题包含多组数据
第一行包含一个正整数T(1≤T≤2×105)T \left( 1 \le T \le 2 \times 10^5 \right)T(1≤T≤2×105),代表测试用例的组数。
对于每组数据:
第一行输入一个正整数n(2≤n<109)n \left( 2 \le n < 10^{9} \right)n(2≤n<109),代表该完全图的节点个数。

输出描述:

对于每组数据:
输出一行一个整数,代表该完全图最小生成树的边权和。

示例1

输入

1
3

输出

1

说明

对于n=3n=3n=3的完全图,生成树的方式有如下三种:

*  \leftrightarrow 2, 1 \leftrightarrow 3,生成树的权值之和为0+1=1

*  1\leftrightarrow 3, 2 \leftrightarrow 3,生成树的权值之和为1+2=3

* 1 \leftrightarrow 2, 2 \leftrightarrow 3,生成树的权值之和为0+2=2

选择第一种连接方式最优,因此最小生成树的权值之和为1。

思路:

做这个题首先要先了解二进制的一些小特征

第一个,我们要知道所有的偶数二进制的最后以为一定是0,所以我可以用 1 去连接所有的偶数,总权值和为0

第二个,我们要知道一个特点,就是二进制的中,高位的一个1,即使后面全是0,他也比高位为0后面全是1的数大,所以我们的奇数就可以分为两类了,一类是二进制全部为1的,一类是二进制中有0存在的。

二进制中全部为1的数,我们要想让他贡献最小,可以考虑他的下一个数存不存在。比如  7=(111)_2  就可以用8=(1000)_2 来连接,他的贡献也是 0.

二进制中有 0 存在的,我们就可以找小于他的一个数来跟他连接,找的这个数的二进制各位数字恰好与其相反,所以这一类的贡献也都是0

综上,我们就可以看出答案只有两种情况,一个是1,一个是0。总结起来,其实就是看最后一个数属于哪一类,如果属于二进制中全1的一类的话,他的下一个就不存在了,所以我们只能考虑让他跟1连,与运算之后是1.(与其他数运算结果为什么大,就是第二条)

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+10;
int a[N];
void solve(){int n;cin >> n;if(n % 2 == 0){cout << "0\n";}else{bool flag = 0;while(n){if(n % 2 == 0){flag = 1;break;}n /= 2;}if(flag)cout << "0\n";else cout << "1\n";}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;cin >> T;while(T--){solve();}return 0;
}
http://www.lryc.cn/news/116316.html

相关文章:

  • Maven引入本地jar包
  • Java并发编程实战——结构化并发应用程序
  • uniapp echarts 点击失效
  • 手机开启应急预警通知 / 地震预警
  • 2020年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 遇到无法复现的 Bug
  • 虚拟列表的实现(简单易懂)
  • 【WordPress】如何在WordPress中实现真·页面路由
  • Android界面设计与用户体验
  • 基于 FFmpeg 的跨平台视频播放器简明教程(八):音画同步
  • 【NLP pytorch】基于BiLSTM-CRF模型医疗数据实体识别实战(项目详解)
  • 人工智能原理(1)
  • 预测成真,国内传来三个消息,中国年轻人变了,创新力产品崛起
  • 维深(Wellsenn):2023中国消费端VR内容开发商调研报告(附下载
  • redis事务管理详解
  • 国产低功耗蓝牙HS6621CxC/6621Px系列支持Find My网络功能方案芯片
  • 【openGauss】分区表的介绍与使用
  • 代码随想录算法训练营day57
  • 【基础类】—前后端通信类系统性学习
  • vite项目中使用@代表根路径
  • 冶金化工操作VR虚拟仿真实验软件提高员工们协同作业的配合度
  • SQL Server数据库 -- 索引与视图
  • 2023 java web面试秘籍
  • 2023-08-05力扣今日二题
  • stl_list类(使用+实现)(C++)
  • 利用hfish反控境外攻击源主机
  • 4、Rocketmq之存储原理
  • 在线原型设计工具有好用的吗?就是这10个
  • Vc - Qt - QPainter translate
  • Spark Catalog详解