CF#318 (Div. 2)B. Bear and Three Musketeers 暴力 复杂度分析

来源:互联网 发布:win7服务器端口开放 编辑:程序博客网 时间:2024/06/05 23:56
http://codeforces.com/problemset/problem/574/B
题意:给你n个点,点之间可以连接也可以不连接,求组成的三角形中外部分支的个数,有多个三角形
时求分支最少的个数;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
int max(int a,int b) {return a>b?a:b;};
int min(int a,int b) {return a<b?a:b;};
int flag[4005][4005],d[4005];
int main()
{
int n,m,u,v;
while(~scanf("%d %d",&n,&m))
{
memset(flag,0,sizeof(flag));
memset(d,0,sizeof(d));
for(int i=1;i<=m;i++)
{
scanf("%d %d",&u,&v);
flag[u][v]=flag[v][u]=1;
d[u]++;d[v]++;
}
int ans=inf;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(flag[i][j])
for(int k=j+1;k<=n;k++)
if(flag[i][k]&&flag[k][j])
ans=min(ans,d[i]+d[j]+d[k]-6);
printf("%d\n",ans==inf?-1:ans);
}
return 0;
}


分析:暴力求解,,关键是分析出复杂度n^2+m*n,而不是看到三层循环就n^3,
阅读全文
0 0