无向图最小环——Floyd解法
题目链接
简单讲一下题意:
给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解法相关推荐
- hdu 1599 find the mincost route(找无向图最小环)(floyd求最小环)
ps(我到今天才知道Floyd的核心思想是动态规划==) hdu 1599 find the mincost route(找无向图最小环) 注意!这里写成 #define data 0x3f3f3 ...
- ssl1763-观光旅游【最小环,Floyd,dijkstra】
正题 就是给出一个无向图,求最小环. 输入输出(需要自取) Input 每组数据的第一行包含两个正整数:十字路口的个数N(N<=100),另一个是道路的 数目M(M<10000).接下来的 ...
- Floyd算法求无向图最小环
原理可看菊苣博文:http://www.cnblogs.com/khan724/p/4383686.html 自己代码中解释一些小细节.该算法适用于无向图,而有向图的最小环,实际上就是初始化所有点为i ...
- 求无向图最小环算法-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++) ...
- 【POJ1734】Sightseeing Trip 无向图最小环
题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径. 题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K ...
- 【UOJ 276】无向图最小环
[题目描述]: 给定一张无向图,求图中一个至少包含 3个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的边权之和.若无解,输出 &quo ...
- 最小环 floyd java_Floyd最小环
最小环:从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的. 怎样求最小环呢? 1传统的解决方法(dijkstra): 任意一个最小环环的权值,我们都可以看成两个有边相连的 ...
- 最小环 floyd java_最小环(floyd)
A - find the mincost route Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- 最小环 floyd java_干货|Floyd求最小环(CF Shortest Cycle)
作者:Water_Fox 来源:牛客网 You are given nn integer numbers a1,a2,-,ana1,a2,-,an. Consider graph on nn node ...
最新文章
- MySQL installer
- Java学习第三天160818 表单 框架 下拉列表等
- java中的asList_Java Arrays.AsList原理及用法实例
- securecrt遇到一个致命的错误且必须关闭_高性能服务器之路 | 浅谈 Valgrind 内存错误检查神器 Memcheck...
- 网页监控插件distill web monitor使用之监控亚马逊到货及价格
- 中国第一代技术网红,阿里云P10技术专家褚霸:我只是一个程序员 。
- 杭电ACMSteps中Chapter One——Section 3中所有ac代码及解析
- itext7+poi实现excel转pdf
- 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
- 微信注册验证成功之后不跳转_微信为什么会被限制登录?被限制后我们该怎么办?...
- 靠腾讯光速上位,但同程艺龙可不能忘了“练内功”
- ChatGPT 之父传奇:8岁学编程,16岁出柜,37岁颠覆科技圈,网友:“天选 CEO!”...
- C++ 简单编程——两数相乘
- 想在微信上使用chatGPT?小程序?公众号?企业微信,最终还是选择了企业微信版本的chatgpt
- 各大有名库的介绍(转)
- 最热门的CPLD-FPGA论坛
- [FPGA]关于Xilinx与Altera两家FPGA结构的对比
- 使用BitLocker加密磁盘
- win7出现多重网络导致的不能上网netsh工具简介
- JAVA中XML读写