码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #318 (Div. 2)

时间:2015-08-31 11:56:12      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:codeforces round   #318 div. 2   b - bear and three m   acm   

<pre name="code" class="cpp">


思路:最暴力的想法,用一个三重循环去遍历,这道题给出的时间是2秒,而且cf的服务器肯定很好,所以时间上应该是没有压力的,但我心里一直没底,总感觉会超时。

在这里,看了大牛们的代码,学了一个新思路,对于一个三重循环,可以找出他们两两之间有什么关系,用pair,或strcut保存下来,题目里的m是4000,远远小于n,这样会使时间压力减少很多,


62ms


#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=5005;
int g[maxn][maxn];
int degree[maxn];
int main(void)
{
    int n,m;
    scanf("%d%d",&n,&m);
    memset(degree,0,sizeof(degree));
    memset(g,0,sizeof(g));
    for(int i=1;i<=m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        g[a][b]=1;
        g[b][a]=1;
        degree[a]++;
        degree[b]++;
    }
    int minn=inf;
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(g[i][j])
            {
                for(int k=j+1;k<=n;k++)
                {
                    if(g[i][k]&&g[j][k])
                    {
                        minn=min(minn,degree[i]+degree[j]+degree[k]-6);
                    }
                }
            }
        }
    }
    if(minn!=inf)
    printf("%d\n",minn);
    else printf("-1\n");
    return 0;
}


31ms


#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=5005;
int g[maxn][maxn];
int degree[maxn];
int main(void)
{
    int n,m;
    scanf("%d%d",&n,&m);
    memset(degree,0,sizeof(degree));
    memset(g,0,sizeof(g));
    for(int i=1;i<=m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        g[a][b]=1;
        g[b][a]=1;
        degree[a]++;
        degree[b]++;
    }
    int minn=inf;
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(g[i][j])
            {
                for(int k=j+1;k<=n;k++)
                {
                    if(g[i][k]&&g[j][k])
                    {
                        minn=min(minn,degree[i]+degree[j]+degree[k]-6);
                    }
                }
            }
        }
    }
    if(minn!=inf)
    printf("%d\n",minn);
    else printf("-1\n");
    return 0;
}


版权声明:转载务必请标明出处,谢谢

Codeforces Round #318 (Div. 2)

标签:codeforces round   #318 div. 2   b - bear and three m   acm   

原文地址:http://blog.csdn.net/wyt734933289/article/details/48119969

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!