题目链接
简单讲一下题意:
给n(<=1e5)个数,数字范围(1e18)任意两个数字之间如果经过与运算以后不为0则可以判为两点相连,给出最小环大小,如果没有则输出-1;
第一步将1e5变小,可以发现只要二进制的任意一位上面出现过3个乃至以上的1则只需输出3,大致算一下那么只有100个数字左右了可以跑Floyd了!!
由Floyd算法可以知道,在它运行到以k做中间节点时,前面经过所有点都比k小的节点之间的最短路径其实已经确定了。因为在k做中间节点时他的最大节点必须大于等于k。
因此每一次枚举一个中间节点我们都可以知道前面所产生的比k小的所有的最短路径。
而一个环(p->i->j->p)的长度为dis[i][j]+a[p][i]+a[j][p];我们每一次枚举dis[i][j]的长度再加上原本图上的两条边找到最小值就行了

#include <iostream>
#include <cstring>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int N = 1e5 + 5;
int n, cnt = 0,dis[200][200], p[200][200];
long long ans = N,a[N], b[N];
void floyd(void)
{for (int i = 1; i <= cnt; i++)//一定经过i点{for (int j = 1; j < i; j++)//枚举比i小的一个点{for (int k = j+1; k < i; k++)//{if(k!=j)ans = min((long long)dis[j][k] + p[k][i] + p[i][j], ans);//0x3f3f3f3f*3越int了//cout << ans<<endl;}}for (int j = 1; j <= cnt; j++){for (int k = 1; k <= cnt; k++){dis[j][k] = min(dis[j][k], dis[i][k] + dis[j][i]);}}}
}
int main()
{scanf("%d", &n);int v[63];memset(v, 0, sizeof(v));memset(dis, 0x3f3f3f3f, sizeof(dis));memset(p, 0x3f3f3f3f, sizeof(p));for (int i = 1; i <= n; i++){scanf("%lld", &a[i]);for (int j = 62; j > 0; j--){if ((a[i] >> j)&1) v[j]++;}}for (int i = 1; i <= 62; i++){if (v[i] > 2){puts("3");return 0;}}for (int i = 1; i <= n; i++) if (a[i]) b[++cnt] = a[i];for (int i = 1; i <= cnt; i++){for (int j = 1; j <= cnt; j++){if (b[i] & b[j]) dis[i][j] = 1, p[i][j] = 1;}}//cout << ans << endl;floyd();//printf_s("%lld\n", ans);if (ans == N) ans = -1;cout << ans;
}

无向图最小环——Floyd解法相关推荐

  1. hdu 1599 find the mincost route(找无向图最小环)(floyd求最小环)

    ps(我到今天才知道Floyd的核心思想是动态规划==) hdu 1599 find the mincost route(找无向图最小环) 注意!这里写成   #define data 0x3f3f3 ...

  2. ssl1763-观光旅游【最小环,Floyd,dijkstra】

    正题 就是给出一个无向图,求最小环. 输入输出(需要自取) Input 每组数据的第一行包含两个正整数:十字路口的个数N(N<=100),另一个是道路的 数目M(M<10000).接下来的 ...

  3. Floyd算法求无向图最小环

    原理可看菊苣博文:http://www.cnblogs.com/khan724/p/4383686.html 自己代码中解释一些小细节.该算法适用于无向图,而有向图的最小环,实际上就是初始化所有点为i ...

  4. 求无向图最小环算法-floyd

    floyd算法. 有 i 出发返回 i 的最小环=min{d[i][j]+map[i][k]+map[k][j]}; for(k=1:k<=n:k++){ for(i=1:i<k:i++) ...

  5. 【POJ1734】Sightseeing Trip 无向图最小环

    题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径. 题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K ...

  6. 【UOJ 276】无向图最小环

    [题目描述]: 给定一张无向图,求图中一个至少包含 3个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的边权之和.若无解,输出 &quo ...

  7. 最小环 floyd java_Floyd最小环

    最小环:从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的. 怎样求最小环呢? 1传统的解决方法(dijkstra): 任意一个最小环环的权值,我们都可以看成两个有边相连的 ...

  8. 最小环 floyd java_最小环(floyd)

    A - find the mincost route Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...

  9. 最小环 floyd java_干货|Floyd求最小环(CF Shortest Cycle)

    作者:Water_Fox 来源:牛客网 You are given nn integer numbers a1,a2,-,ana1,a2,-,an. Consider graph on nn node ...

最新文章

  1. MySQL installer
  2. Java学习第三天160818 表单 框架 下拉列表等
  3. java中的asList_Java Arrays.AsList原理及用法实例
  4. securecrt遇到一个致命的错误且必须关闭_高性能服务器之路 | 浅谈 Valgrind 内存错误检查神器 Memcheck...
  5. 网页监控插件distill web monitor使用之监控亚马逊到货及价格
  6. 中国第一代技术网红,阿里云P10技术专家褚霸:我只是一个程序员 。
  7. 杭电ACMSteps中Chapter One——Section 3中所有ac代码及解析
  8. itext7+poi实现excel转pdf
  9. 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
  10. 微信注册验证成功之后不跳转_微信为什么会被限制登录?被限制后我们该怎么办?...
  11. 靠腾讯光速上位,但同程艺龙可不能忘了“练内功”
  12. ChatGPT 之父传奇:8岁学编程,16岁出柜,37岁颠覆科技圈,网友:“天选 CEO!”...
  13. C++ 简单编程——两数相乘
  14. 想在微信上使用chatGPT?小程序?公众号?企业微信,最终还是选择了企业微信版本的chatgpt
  15. 各大有名库的介绍(转)
  16. 最热门的CPLD-FPGA论坛
  17. [FPGA]关于Xilinx与Altera两家FPGA结构的对比
  18. 使用BitLocker加密磁盘
  19. win7出现多重网络导致的不能上网netsh工具简介
  20. JAVA中XML读写

热门文章

  1. windows10系统显示桌面电脑图标
  2. 一文速学数模-分类模型(二)决策树(Decision Tree)算法详解及python实现
  3. C语言数组fun函数逆置数组元素,C语言
  4. 大数据讲座一:大数据中的数据流向
  5. 【OpenCv/EmguCv】指针式仪表读数(一)
  6. 信创办公–基于WPS的EXCEL最佳实践系列 (宏的录制)
  7. 关于如何定制开发Android第三方ROM,最全开发教程、原理阐述
  8. OAuth2.0协议(一) - 授权码许可流程
  9. NotePad快捷键
  10. 微信小程序源码删除解决办法解包