这题很神奇的简化时间的方式,反正本弱渣感觉很神奇,本来我写的三层循环,然后果断T了,因为是n^3的算法,
然后把第二层训话后面加一个if判断语句,时间复杂度就变成了你n^2+n*m,不是很理解这个时间复杂度是怎么算的,
具体的看代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<ctime>
#include<algorithm>
#include<limits.h>
#define LL long long
using namespace std;
const int N=4*1e3+10;
char a[N][N];
int sum[N];
int main()
{
int n,m;
while(cin>>n)
{
cin>>m;
memset(a,0,sizeof(a));
memset(sum,0,sizeof(sum));
for(int i=0;i<m;i++)
{
int b,c;
scanf("%d%d",&b,&c);
a[b][c]=1;
a[c][b]=1;
sum[b]++;
sum[c]++;
}
// sort(sum,sum+n);
int Min=INT_MAX;
// cout<<Min<<endl;
int flag=0;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
if(a[i][j])
{
for(int k=j+1;k<=n;k++)
{
if(a[i][k]&&a[j][k])
{
int ans=sum[i]+sum[j]+sum[k]-6;
flag=1;
Min=min(Min,ans);
}
}
}
}
if(flag)
cout<<Min<<endl;
else
cout<<-1<<endl;
}
return 0;
}