@codeforces - 1205B@ Shortest Cycle
@description@
给定一个长度为 n 的正整数序列 a1, a2, ..., an。
考虑建一张 n 个点的图。假如 ai AND aj ≠ 0,则在 i, j 之间连无向边。
求在这张图上的最小环。
Input
第一行一个整数 n 表示序列长度 (1≤n≤10^5)
第二行包含 n 个整数 a1,a2,…,an (0≤ai≤10^18)。
Output
如果图中不含任何环,输出 -1。
否则输出最小环长度。
Examples
Input
4
3 6 28 9
Output
4
Input
5
5 12 9 16 48
Output
3
Input
4
1 2 4 8
Output
-1
Note
第一个样例答案为 (9,3,6,28)。
第二个样例答案为 (5,12,9)。
第三个样例没有环。
@solution@
其实是一道很 sb 的题。。。
考虑假如某个二进制位上存在至少三个数该位为 1,则存在一个长度为 3 的环,显然该环最小。
因为最多有 60 个二进制位,每个位上存在最多 2 个数该位为 1 才有考虑的价值。
而在这种情况,因为非 0 的元素总会占一个二进制位的 1,所以最多会有 120 个非 0 元素;而为 0 的元素就是个孤立点,不需要管它。
所以直接当非 0 的点数 < 120(代码中写的是 300比较方便copy模板)时才用 Floyd 跑最小环,否则直接输出 3。
@accepted code@
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 300;
int G[MAXN + 5][MAXN + 5], A[MAXN + 5][MAXN + 5];
ll a[MAXN + 5];
int n, cnt;
int main() {
scanf("%d", &n);
for(int i=1;i<=n;i++) {
ll x; scanf("%lld", &x);
if( x ) a[++cnt] = x;
if( cnt > MAXN ) {
puts("3");
return 0;
}
}
for(int i=1;i<=cnt;i++)
for(int j=1;j<=cnt;j++)
if( a[i] & a[j] ) A[i][j] = G[i][j] = 1;
else A[i][j] = G[i][j] = MAXN + 5;
int ans = MAXN + 5;
for(int k=1;k<=cnt;k++) {
for(int i=1;i<k;i++)
for(int j=i+1;j<k;j++)
ans = min(ans, A[i][k] + A[k][j] + G[i][j]);
for(int i=1;i<=cnt;i++)
for(int j=1;j<=cnt;j++)
G[i][j] = min(G[i][k] + G[k][j], G[i][j]);
}
if( ans == MAXN + 5 ) puts("-1");
else printf("%d\n", ans);
}
@details@
所以,我至今不知道为什么我当时会卡在这种 sb 题上面。。。
@codeforces - 1205B@ Shortest Cycle的更多相关文章
- [Codeforces 1205B]Shortest Cycle(最小环)
[Codeforces 1205B]Shortest Cycle(最小环) 题面 给出n个正整数\(a_i\),若\(a_i \& a_j \neq 0\),则连边\((i,j)\)(注意i- ...
- Codeforces 1206 D - Shortest Cycle
D - Shortest Cycle 思路:n大于某个值肯定有个三元环,否则floyd找最小环. 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) ...
- Codeforces Round #580 (Div. 2)-D. Shortest Cycle(思维建图+dfs找最小环)
You are given nn integer numbers a1,a2,…,ana1,a2,…,an. Consider graph on nn nodes, in which nodes ii ...
- CF 1206D - Shortest Cycle Floyd求最小环
Shortest Cycle 题意 有n(n <= 100000)个数字,两个数字间取&运算结果大于0的话连一条边.问图中的最小环. 思路 可以发现当非0数的个数很大,比如大于200时, ...
- D. Shortest Cycle(floyd最小环)
D. Shortest Cycle time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- D. Shortest Cycle
D. Shortest Cycle A[i]&A[j]!=0连边, 求图中最小环 N>128 时必有3环 其他暴力跑 folyd最小环 #include<bits/stdc++.h ...
- codeforces 962F.simple cycle(tarjan/点双连通分量)
题目连接:http://codeforces.com/contest/962/problem/F 题目大意是定义一个simple cycle为从一个节点开始绕环走一遍能经过simple cycle内任 ...
- Codeforces 938G Shortest Path Queries [分治,线性基,并查集]
洛谷 Codeforces 分治的题目,或者说分治的思想,是非常灵活多变的. 所以对我这种智商低的选手特别不友好 脑子不好使怎么办?多做题吧-- 前置知识 线性基是你必须会的,不然这题不可做. 推荐再 ...
- Codeforces 845G Shortest Path Problem?
http://codeforces.com/problemset/problem/845/G 从顶点1dfs全图,遇到环则增加一种备选方案,环上的环不需要走到前一个环上作为条件,因为走完第二个环可以从 ...
随机推荐
- linux环境变量设置命令
1echo $ <变量名> //显示某个环境变量 2env // environment (环境) 的简写,列出来所有的环境变量 3set //显示所有本地定义的Shell ...
- bzoj 4521 [Cqoi2016]手机号码——数位dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 dfs真好用~ #include<iostream> #include&l ...
- NYoj 155最短路
//dij #include<stdio.h> #include<string.h> #include<queue> using namespace std; #d ...
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
百度为何开源深度机器学习平台? 有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举. 5月20日,百度在github上开源了其 ...
- vs code 配置c/c++环境
1. 编译 通过 code-runner插件 运行编译 安装code-runner后在settings.json中找到code-runner.executorMap,可以看到其中的cpp 文件运行方式 ...
- linux中的用户、群组和权限
linux中的用户.群组和权限 新建用户natasha,uid为1000,gid为555,备注信息为“master” groupadd -g 555 natasha useradd -u 1 ...
- mkdir、touch、rm和rmdir命令
一.mkdir命令 mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录:如果给出了一个已经存在的路径,将 ...
- nginx与apache
参考链接:https://www.cnblogs.com/changning0822/p/7844004.html
- Java8中的LocalDateTime工具类
网上搜索了半天都没有找到Java8的LocalDateTime的工具类,只好自己写了一个,常用功能基本都有.还在用Date的Java同道该换换了. 个人项目地址:https://github.com/ ...
- day39-Spring 17-Spring的JDBC模板:完成增删改的操作
JdbcTemplate根DBUtils非常类似,你要是有非常多的Dao,你每一个Dao都需要写它 /*在Dao层注入JDBC模板*/ private JdbcTemplate jdbcTemplat ...