CF574B根据m简化时间

来源:互联网 发布:日本买mac口红便宜吗 编辑:程序博客网 时间:2024/06/05 15:45

这题很神奇的简化时间的方式,反正本弱渣感觉很神奇,本来我写的三层循环,然后果断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 longusing 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;}


0 0