cf 1205B Shortest Cycle(最小环)
题目链接
首先学习一下抽屉原理:百度百科链接
总结一句话:把多于 m ∗ n + 1 m*n+1 m∗n+1(n不为0)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于 ( m + 1 ) (m+1) (m+1)的物体。
题意:给n个数,在 a i a_i ai和 a j a_j aj之间建一条权值为1的边当且仅当 a i a_i ai& a j a_j aj != 0,问最小环的长度
思路: n n n最多有 1 0 5 10^5 105个,暴力存图都不可能开这么大的空间。就要优化,首先0肯定不用加进图中。 a i a^i ai最大有 1 0 18 10^{18} 1018,也就是最大不超过 2 60 2^{60} 260。 n n n个数,每个数都有60个位置,只要这60个位置里至少有一个位置上有3个以上的1,那么答案就是3。所以我们需要某个位置上的 1的个数>=3,就把每个数都抽象成1,把 a a a个数填到60个位置中,根据抽屉原理, a a a为121,所以不为0的数只要大于120就直接输出3即可
#include<bits/stdc++.h>#define mid(l,r) (( l + r ) / 2)#define lowbit(x) (( x & ( - x )))#define lc(root) ((root * 2))#define rc(root) ((root * 2 + 1))#define me(array,x) (memset( array , x , sizeof( array ) ) )typedef long long LL;using namespace std;const LL inf = 10000000;const int mod = 1e9 + 7;const int maxn = 1e6 + 10;LL mp[500][500], dis[500][500], a[maxn];LL n, cnt=0;void init(){me(mp,0);me(dis,0);for(int i=1; i<=cnt; i++){for(int j=1; j<=cnt ; j++){if(a[i]&a[j])mp[i][j] = dis[i][j] = 1;elsemp[i][j] = dis[i][j] = inf;}}}int main(){scanf("%lld",&n);for(int i = 1 ; i <= n ; i++){LL x;scanf("%lld",&x);if(x != 0)a[++cnt] = x;}if(cnt > 120)printf("3\n");else{init();LL ans = inf;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,mp[i][j] + dis[i][k] + dis[k][j]);}}for(int i = 1; i <= cnt ; i++){for(int j =1 ; j <= cnt ; j++){mp[i][j] = min(mp[i][j],mp[i][k]+mp[k][j]);}}}if(ans == inf)printf("-1\n");elseprintf("%lld\n",ans );}return 0;}
cf 1205B Shortest Cycle(最小环)相关推荐
- codeforces1206D. Shortest Cycle (最小环)
题意: 给n个数,(a[1]-a[n]),如果如果i!=j且(a[i]&a[j])!=0,则在i与j之间建边 求图的最小环 (无向图最小环至少三个顶点) 分析: 如果二进制位的某一位为1的数的 ...
- 最小环 floyd java_干货|Floyd求最小环(CF Shortest Cycle)
作者:Water_Fox 来源:牛客网 You are given nn integer numbers a1,a2,-,ana1,a2,-,an. Consider graph on nn node ...
- 2019.11.2图论专题(AtCoder Splatter Painting、President and Roads、Shortest Cycle、ISlands II)
D:AtCoder Grand Contest 012 Splatter Painting 题目描述 Squid喜欢在图中为一些顶点染色(毕竟是鱿鱼 ) 现在有一张由 N 个顶点和 M 条边组成的简单 ...
- CF #580 Div. 2 D. Shortest Cycle//floyd求最小正环(模板
https://codeforces.com/contest/1206/problem/D 题意: 思路: 如果有3个数二进制有一位都是1,那么答案就是3.否则最多有64*2个正整数.对于64*2个正 ...
- CF Gym102028G Shortest Paths on Random Forests
传送门 这题要求的期望,就是总权值(所有不在同一个连通块点对的贡献+同一连通块点对的贡献)/总方案(森林个数) 先求森林个数,森林是由一堆树组成的,而根据purfer序列,一棵\(n\)个点的有标号的 ...
- [总结]2019年10月 OI学习/刷题记录
10月份记录! 2019/10/1 UOJ #74. [UR #6]破解密码 Hash+分类讨论 UOJ #75. [UR #6]智商锁 Matrix-Tree定理+随机化 UOJ #76. [UR ...
- Codeforces Round #580 (Div. 2)
Solutions A. Choose Two Numbers 题意: 给出\(A,B\)两个集合,\(A,B\) 集合分别选一个数\(a,b\) ,使得\(a+b\notin\ A,B\) 思路: ...
- ACM图论+数据结构杂题总结
ACM:图论+数据结构杂题总结 T1: 题目描述:(出处:Atcoder Regular Contest 067 Yakiniku Restaurants) 一条街上有N家烧烤餐馆.餐厅从西到东编号为 ...
- OD消息断点的设置方法
一.条件断点: 使用方法(如): 在当前行按[Shift+F2]键->条件断点(这个不太好用,因为程序BUG偶尔失效). 在当前行按[Shift+F4]键->条件记录断点(只要设置上条件语 ...
最新文章
- Altium Designer-Net has no driving source解决办法
- 设计模式学习笔记——状态(State)模式框架
- python爬虫select用法_Python爬虫利器二之Beautiful Soup的用法
- (筆記) Continuous Assignment的幾個特色 (SOC) (Verilog)
- ceph对接openstack环境
- Ubuntu 16.04中的Dock的应用顺序调整
- 32.分配数组的方式
- oracle数据库注册服务,oracle 共享服务联接静态注册服务
- DHCPV6 配置实验
- android获取系统剪贴板内容,android系统如何如何恢复剪贴板内容
- OneNote for win10 登录不了
- PCB正片和负片的区别与使用
- 【移动安全高级篇】————2、浅谈Android软件安全自动化审计
- Unity中镜像图片显示
- android水平wheelview,android:自定义横向滚动的WheelView
- 微信小程序抽奖 简单功能实现
- VUI设计--一些自己认为的原则
- java 开源 网络流量统计_开源 java CMS - FreeCMS2.6 统计分析
- 多媒体的一些基本概念
- 在线SVG图形编码工具
热门文章
- 昨天已经顺利完成了新浪微博的关注和获取已关注人信息的功能开发
- ORACLE插入字符串换行
- 用Unity时,C#中List删除元素时出错
- python vars name报错_简单瞅瞅Python vars()内置函数的实现
- 虚幻引擎图文笔记:彻底搞懂重定向(Retargeting)之 解释一下UE Skeleton骨架
- 机器学习:fit,transform,fit_transform区别(附代码)
- Aegisub时间码格式详解
- css鼠标拖拉卡顿_vue中解决拖拽改变存在iframe的div大小时卡顿问题
- With (CTE、递归CTE)
- 三步开启你的网络服务全球动态加速之旅