博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1206 D - Shortest Cycle
阅读量:5337 次
发布时间:2019-06-15

本文共 1543 字,大约阅读时间需要 5 分钟。

思路:n大于某个值肯定有个三元环,否则floyd找最小环。
代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define double long double#define y1 y11#define fi first#define se second#define pi acos(-1.0)#define LL long long//#define mp make_pair#define pb emplace_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pli pair
#define pii pair
#define piii pair
#define pdd pair
#define mem(a, b) memset(a, b, sizeof(a))#define debug(x) cerr << #x << " = " << x << "\n";#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//head const int N = 1e5 + 5;const int INF = 1e8;LL a[N];int mp[205][205], dis[205][205];int n, cnt;int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%lld", &a[i]), cnt += a[i]==0; sort(a+1, a+1+n, greater
()); n -= cnt; if(n >= 200) { printf("3\n"); return 0; } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if(i == j) continue; if(((a[i]&a[j]) != 0)) mp[i][j] = dis[i][j] = 1; else mp[i][j] = dis[i][j] = INF; } } int ans = INF; for (int k = 1; k <= n; ++k) { for (int i = 1; i < k; ++i) { for(int j = i+1; j < k; ++j) { ans = min(ans, dis[i][j]+mp[j][k]+mp[k][i]); } } 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 == INF) printf("-1"); else printf("%d\n", ans); return 0;}

转载于:https://www.cnblogs.com/widsom/p/11378945.html

你可能感兴趣的文章
python装饰器@property
查看>>
oracle 删除死锁
查看>>
python字符串与文本操作(一)
查看>>
table和div的比较(转)
查看>>
1.几大开发模型区别与联系
查看>>
[原]使用 Microsoft Expression 编写 网页 (javascript) 非常棒
查看>>
intellij Idea 报jdk错误
查看>>
ajax入门(复习)
查看>>
LeetCode:154. 寻找旋转排序数组中的最小值 II
查看>>
magento 安装
查看>>
《结对-HTML贪吃蛇游戏项目-测试过程》
查看>>
Python数据结构与语法
查看>>
UVA 1400 线段树
查看>>
C# ref
查看>>
接口API测试和返回值JSON解析的插件
查看>>
Shiro学习笔记
查看>>
Contest2195 - 2019-4-25 高一noip基础知识点 测试8 题解版
查看>>
EL表达式总结
查看>>
WCF的应用与说明
查看>>
JSON
查看>>