D. Shortest Cycle(floyd求最小环)

news2025/1/19 23:23:49

Problem - D - Codeforces

给你n个整数a1,a2,..., ana1,a2,...,an。考虑n个节点的图,其中节点ii, jj (i≠ji≠j)是相连的,当且仅当,aiaiAND aj≠0aj≠0,其中AND表示位数和操作。

请找出该图中最短周期的长度,或确定它根本没有周期。

输入

第一行包含一个整数nn(1≤n≤105)(1≤n≤105)--数字的数量。

第二行包含n个整数a1,a2,...,ana1,a2,...,an(0≤ai≤10180≤ai≤1018)。

输出

如果该图没有任何循环,则输出-1-1。否则输出最短周期的长度。

例子

输入

拷贝

4
3 6 28 9
输出

复制

4
输入

复制

5
5 12 9 16 48
输出

复制

3
输入

复制

4
1 2 4 8
输出

复制

-1
注意

在第一个例子中,最短的周期是(9,3,6,28)(9,3,6,28)。

在第二个例子中,最短的周期是(5,12,9)(5,12,9)。

在第三个例子中,该图没有循环。

题解:
既然是求最小环,普通求最小环数据过大,所以肯定和数据有关,题中说&不为0的连边,那么如果二进制某一位上次数出现超过3,说明出现了一个为长度为3的环,环最小也就是3,

而数据只有1e18,顶多60 * 2 + 1个不为0的ai,肯定会构成一个为3的最小环

剩下的数组足够我们跑一个,floyd求最小环的板子了(由于ai可能为0,太多0也会t,所以把为0的去除,反正对答案无影响)

(记得(1 << 60) 如果像这样就会爆int,1记得加ll)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
#define int long long
typedef pair<int,int> PII;
int d[204][204];
int a[100050];
int c[100];
int f[204][204]; 
void solve()
{
	int n;
	cin >> n;
	int ff = 0;
	for(int i = 1;i <= n;i++)	
	{
		cin >> a[i];
		for(int j = 0;j <= 60;j++)
		{
			if((1ll << j)&a[i])
			{
				c[j]++;
			}
			if(c[j] >= 3)
			ff = 1; 
		}
	}
	if(ff)
	{
		cout <<3<<"\n";
		return ;
	}
	int len = 0;
	for(int i = 1;i <= n;i++)
	{
		if(a[i])
		a[++len] = a[i];
	}
	n = len;
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= n;j++)
		{
			if(a[i]&a[j])
			{
				d[i][j] = 1;
			}
			else
			{
				d[i][j] = 1e8;
			}
		}
	}

	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= n;j++)
		f[i][j] = d[i][j];
	}
	
	int ans = 1e8;
	for(int k = 1;k <= n;k++)
	{
		for(int i = 1;i < k;i++)
		{
			for(int j = i + 1;j < k;j++)
			{
				if(f[i][j] + d[j][k] + d[k][i] < ans)
				{
					ans =  f[i][j] + d[j][k] + d[k][i];
				}
			}
		}
		for(int i = 1;i <= n;i++)
		{
			for(int j = 1;j <= n;j++)
			{
				if(f[i][j] > f[i][k] + f[k][j])
				{
					f[i][j] = f[i][k] + f[k][j];
				} 
			}
		}
	}
	if(ans == 1e8)
	cout << -1;
	else
	cout << ans;
}


signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库锁表原因、排查、解决

数据库锁表原因、排查、解决 一.场景场景1场景2 二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML&#xff08; insert 、update 、delete &#xff09; A操作进行全量数据同步&#xff0c;对整个表的粒度进行上锁&#xff0c;导致B操作只能等待A操作完成才能进入…

Vue中mixins(混入)的介绍和使用

什么是Mixin&#xff1f; 想要使用一个事物或者工具&#xff0c;我们首要先了解它是什么&#xff0c;这样我们才好对症下药。 其实Mixin不是Vue专属的&#xff0c;可以说它是一种思想&#xff0c;也可以说它就是混入的意思&#xff0c;在很多开发框架中都实现了Mixin(混入)&a…

我的第一本书终于要印刷了!

终于要印刷了 编辑发来了一个好消息&#xff0c;我的书最快下周就可以印刷出版了。 从开始动笔到提交第一稿&#xff0c;前后有1年的时间&#xff0c; 紧接着和出版社胡老师一起修改&#xff0c; 从一审、二审、三审&#xff0c; 到一校、二校、三校&#xff0c; 确认书…

MobileNetV3详细原理(含torch源码)

作者&#xff1a;爱笑的男孩。 个人简介&#xff1a;打工人。 持续分享&#xff1a;机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。 如发现文章有误&#xff0c;麻烦请指出&#xff0c;我会及时去纠正。有其他需要可以私信我或者发我邮箱…

企业对外投资为何一定要申请境外投资备案?

随着贸易经济全球化的发展&#xff0c;国内外企业也纷纷把目标转向海外市场&#xff0c;尤其香港&#xff0c;日本&#xff0c;东南亚等地的投资有增无减。 境外投资备案&#xff0c;就是在中国境内设立的公司主体对中国以外的国家进行投资&#xff0c;需要在商务部和发改委进…

高级数据结构与算法 | 自适应基数树(Adaptive Radix Tree)

文章目录 AdaptiveRadixTree基本介绍自适应节点内部节点叶子节点 高度压缩Path CompressionLazy Expansion 算法SearchInsertDeleteBulk loading 并发乐观锁耦合读优化写排除&#xff08;ROWEX&#xff09;适配 ROWEX节点替换路径压缩 AdaptiveRadixTree 基本介绍 论文链接&am…

在win10中使用webdriver

一、察看并下载webdriver 查看 下载&#xff1a; 地址为&#xff1a; CNPM Binaries Mirror (npmmirror.com)https://registry.npmmirror.com/binary.html?pathchromedriver/ 找到对应的版本&#xff0c;最后面的数字不一定要完全相同 二、安装 参考&#xff1a; Python…

设计模式-工厂方法模式

大话设计模式这本书反反复复学过好多遍了&#xff0c;每一次学都会有不同的认识&#xff0c;接下来谈谈我最近学习工厂的一次感受&#xff1b; 发展&#xff1a; 一个计算器的例子从不使用工厂到分离出前端、后端&#xff0c;到使用简单工厂再到使用工厂方法&#xff0c;每一步…

第一性原理计算在材料分析中的应用及未来发展趋势

第一性原理计算是一种理论计算方法&#xff0c;能够基于量子力学原理对物质的性质进行高精度预测。它已经成为材料科学研究中不可或缺的工具&#xff0c;帮助我们了解材料的基本特性&#xff0c;优化材料的性能&#xff0c;并发现新的材料。 一、第一性原理计算的基本原理 第一…

zabbix故障排查

zabbix server服务问题可以查看server日志 tail -f /var/log/zabbix/zabbix_server.log 根据日志中的error报错提示分析原因 zabbix agent服务问题可以查看agent日志 tail -f /var/log/zabbix/zabbix_agentd.log 根据日志中的error报错提示分析原因 zabbix的nginx服务问题可…

Window下编译PJSIP,不编译Media模块

Windows系统下使用VS1027进行编译PJSIP。 下载地址 PJSIP的地址&#xff1a;https://github.com/pjsip/pjproject 在线clone太慢的话&#xff0c;可以直接在这里下载比clone会快很多&#xff1a; https://github.com/pjsip/pjproject/releases 安装OpenSSL 直接安装已经编译…

TitanIDE 新版本来袭,全新“效能看板”上线

TitanIDE产品团队于4月17日晚发布了TitanV2.6.3版本&#xff0c;作为一次重要的版本迭代&#xff0c;新版本主要增加/优化了以下重大功能&#xff1a; 全新效能看板上线&#xff0c;研发进度一目了然&#xff1b;新增代码拷贝、下载权限管理功能&#xff1b;项目启动提速&…

创客匠人视频号全域增长落地班成功举办

以专业赋能好老师&#xff0c;打造知识付费商业IP&#xff0c;借助视频号布局商业增长第二曲线。 4月15日-16日&#xff0c;泛知识场景数字化服务商创客匠人在厦门举办「视频号全域增长落地班」。 本次大会邀请到创客匠人CEO、中欧EMBA蒋洪波&#xff0c;福布斯环球联盟创新企业…

电脑开机进不了系统怎么办?电脑开机错误无法显示桌面解决方法

电脑开机进不了系统怎么办&#xff1f;很多用户都有遇到过电脑正常开机&#xff0c;但是无法进入到系统桌面的情况。其实遇到这个问题&#xff0c;大部分的原因都是因为系统出现了故障损坏&#xff0c;我们可以去通过U盘来重装系统的方法进行解决。一起来看看以下的具体操作方法…

jar包反编译工具(java-decompiler)

五种反编译工具 1.jd-gui 下载地址&#xff1a;http://java-decompiler.github.io/ 优点&#xff1a;反编译的源代码基本符合&#xff0c;没有乱七八糟新增的修饰符 缺点&#xff1a;反编译过程耗时较长&#xff08;50MB需要10分钟左右&#xff09; 无法还原内部类 可以查看对…

DDPG算法详解

DQN算法详解 一.概述 概括来说&#xff0c;RL要解决的问题是&#xff1a;让agent学习在一个环境中的如何行为动作(act)&#xff0c; 从而获得最大的奖励值总和(total reward)。 这个奖励值一般与agent定义的任务目标关联。 agent需要的主要学习内容&#xff1a;第一是行为策略…

leetcode刷题(5)

各位朋友们&#xff0c;大家好&#xff0c;今天是我leedcode刷题的第五篇&#xff0c;我们一起来看看吧。 文章目录 栈的压入&#xff0c;弹出序列题目要求用例输入提示做题思路代码实现C语言代码实现Java代码实现 最小栈题目要求用例输入提示做题思路代码实现Java代码实现 栈的…

QML自定义模块及qmldir的使用

前言 在开发QtQuick项目中&#xff0c;当项目文件很多的情况下&#xff0c;可能会分成多级文件夹来进行分类&#xff0c;还有一些通用类型文件&#xff0c;如公共组件&#xff0c;通用配置等等&#xff0c;需要在各个不同的文件中进行调用&#xff0c;这种情况下&#xff0c;一…

04、Cadence使用记录之器件连接的连线、网络、总线、差分(OrCAD Capture CIS)

04、Cadence使用记录之器件连接的连线、页内网络、总线、跨页网络、差分、电源&#xff08;OrCAD Capture CIS原理图&#xff09; 前置教程&#xff1a; 01、Cadence使用记录之新建工程与基础操作&#xff08;原理图绘制&#xff1a;OrCAD Capture CIS&#xff09; 02、Cadenc…

操作系统原理 —— 操作系统的四个特征:并发、共享、虚拟、异步 (二)

本章我们来聊一下操作系统的四个特征 在我们的操作系统中有四个特征&#xff1a;并发、共享、虚拟、异步&#xff0c;我们结合每一个特征来进行讲解&#xff0c;我们先来看并发。 并发 这里所说的并发&#xff0c;最好不联想到并发编程。咱们就简简单单理解一下&#xff0c;…