• CF147B Smile House


    题目大意:给定一个有向图,其中边有边权。求点数最少的正环的点数。

    题解:建立矩阵,处理其二进制上每一位的状态。时间O(n^3*log(n))。

    代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define N 305
    #define ll long long
    #define inf 0x7fffffff
    int n,m;
    struct jz
    {
        ll s[N][N];
        bool check()
        {
            for(int i=1;i<=n;i++)
                if(s[i][i])return 1;
            return 0;
        }
        jz operator * (jz a)
        {
            jz b;
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    b.s[i][j]=-inf;
                    for(int k=1;k<=n;k++)
                    {
                        b.s[i][j]=max(b.s[i][j],s[i][k]+a.s[k][j]);
                    }
                }
            }
            return b;
        }
    }p[15],p0,p1;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i!=j)
                    p[0].s[i][j]=-inf;
        for(int a,b,c,d,i=1;i<=m;i++)
        {
            scanf("%d%d%d%d",&a,&b,&c,&d);
            p[0].s[a][b]=c;
            p[0].s[b][a]=d;
        }
        for(int i=1;i<=9;i++)
            p[i]=p[i-1]*p[i-1];
        if(!p[9].check())
        {
            printf("0
    ");
            return 0;
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i!=j)
                    p0.s[i][j]=-inf;
        int ans = 0;
        for(int i=9;i>=0;i--)
        {
            p1=p0*p[i];
            if(!p1.check())
            {
                p0=p1;
                ans|=(1<<i);
            }
        }
        printf("%d
    ",ans+1);
        return 0;
    }
  • 相关阅读:
    HDU6655 Just Repeat(2019杭电多校J题)
    贪吃蛇-
    2D命令行小游戏Beta1.0
    寒假作业三
    星 辰 &#183; 第 一 条 约 定
    塔 &#183; 第 三 条 约 定
    class中的东西和继承、多态的概念
    塔 &#183; 第 一 条 约 定
    部门学习总结之类的
    作业二
  • 原文地址:https://www.cnblogs.com/LiGuanlin1124/p/9775870.html
Copyright © 2020-2023  润新知