D. Shortest Cycle
A[i]&A[j]!=0连边,
求图中最小环
N>128 时必有3环
其他暴力跑
folyd最小环
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define sc(x) scanf("%I64d",&x); #define read(A) for(int i=0;i<n;i++) scanf("%I64d",&A[i]); ll A[200005]; ll B[305][305]; ll dis[305][305]; ll N; #define inf 1e18 ll floyd() { ll MinCost = inf; for(int k=1; k<=N; k++) { for(int i=1; i<k; i++) for(int j=i+1; j<k; j++) MinCost = min(MinCost,dis[i][j]+B[i][k]+B[k][j]); 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(MinCost==inf)return -1; else return MinCost; } int main() { // ll N; sc(N); ll _k=1; for(int i=1; i<=N; i++) { sc(A[_k]); if(A[_k]!=0)_k++; } if(_k>=130) { puts("3"); } else { N=_k-1; for(int i=1; i<=N; i++) { for(int j=1; j<=N; j++) { if(i!=j&&(A[i]&A[j])) { B[i][j]=1; dis[i][j]=1; } else if(i==j) { B[i][j]=0; dis[i][j]=0; } else { B[i][j]=inf; dis[i][j]=inf; } } } cout<<floyd()<<'\n'; } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步