题目大意

  给定\(n\)个整数\(a_1,a_2,a_3, \dots ,a_n\),若\(i \neq j\)且\(a_i \land a_j \neq 0\),则节点\(i\)和节点\(j\)相连通。求最小环大小。

  \(1 \leq n \leq 10^5\),\(0 \leq a_i \leq 10^{18}\)。

题解

  题目中的\(a_i\)都在long long的范围内,即\(a_i \in [0, 2^{64})\),则根据容斥原理可得,若集合\(\{ a_i | a_i \neq 0 \}\)的大小\(n\)满足\(n > 128\),一定有节点数为\(3\)的环。

  否则,跑一次Floyd求最小环即可。

// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#include <cstring> #define MAX_N (130 + 5) using namespace std; int n;
long long a[MAX_N];
int w[MAX_N][MAX_N], dis[MAX_N][MAX_N];
int ans = 2000000000; int main()
{
scanf("%d", &n);
long long tmp;
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &a[i]);
if (!a[i]) --i, --n;
if (i > 128) return printf("3"), 0;
}
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
if (i != j && (a[i] & a[j])) w[i][j] = 1;
else w[i][j] = 100000000;
}
}
memcpy(dis, w, sizeof w);
for (int k = 1; k <= n; ++k)
{
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
if (i == k || i == j || j == k) continue;
ans = min(ans, dis[i][j] + w[i][k] + w[k][j]);
}
}
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
}
if (ans > n) printf("-1");
else printf("%d", ans);
return 0;
}

最新文章

  1. ASP中Lable控件的定位问题
  2. securecrt设置 (外观,中文不乱码)
  3. HDU 4707 DFS
  4. 【springMVC】简单的前后端数据交流
  5. JavaScript:文本域事件处理
  6. pom.xml中&lt;dependency&gt;
  7. Selenium终极自动化测试环境搭建(一) Selenium+Eclipse+Junit+TestNG
  8. Java项目中打开本地文件的方法
  9. protobuf python api
  10. 移动webAPP前端开发技巧汇总
  11. hdu1789 Doing Homework again---(经典贪心)
  12. 重写equals的详细说明
  13. 移动端适配--flexible.js
  14. 安装FireEye渗透测试套件commando-vm
  15. SpringBoot+BootStrap多文件上传到本地
  16. controller向layout传值
  17. C++:error 1189(转)
  18. Hive学习之路 (十五)Hive分析窗口函数(三) CUME_DIST和PERCENT_RANK
  19. Java外部类可以访问内部类private变量
  20. indexes和indices的区别

热门文章

  1. MySQL简版(二)
  2. Textarea随着文本的字数自适应高度,后来发现用 contenteditable 代替textarea 效果更佳
  3. vue组件样式scoped
  4. 关于Ubuntu 14.04 安装Oracle 11gR2安装步骤(从开始到放弃--最终使用docker获取)
  5. PHP入门培训教程 一个漂亮的PHP验证码
  6. mysql FOREIGN KEY约束 语法
  7. Pandas中的qcut和cut
  8. winXP 系统下ubuntu-12.04 硬盘安装
  9. Java 静态初始化块等的执行顺序
  10. 模拟赛DAY1 T2腐草为萤