zoukankan      html  css  js  c++  java
  • hdu 4324 Triangle LOVE

    先进行拓扑排序,删除那些不会成环的节点。剩下的节点再重建一张图,进行DFS。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    const int maxn = 2000 + 5;
    int jz[maxn][maxn], rudu[maxn], flag[maxn];
    vector<int>ljb[maxn];
    int uu;
    char s[2005];
    
    void dfs(int tott, int now,int tou)
    {
        int i;
        if (tott == 2)
        {
            if (jz[now][tou] == 1) uu = 1;
            return;
        }
        for (i = 0; i < ljb[now].size(); i++)
        {
            dfs(tott + 1, ljb[now][i], tou);
            if (uu == 1) return;
        }
    }
    
    int main()
    {
        int sb, bs;
        scanf("%d", &sb);
        for (bs = 1; bs <= sb; bs++)
        {
            int n, i, j; uu = 0;
            scanf("%d", &n);
            for (i = 0; i <= n; i++) ljb[i].clear();
            memset(rudu, 0, sizeof(rudu));
            memset(flag, 0, sizeof(flag));
            for (i = 1; i <= n; i++)
            {
                scanf("%s", s);
                for (j = 1; j <= n; j++)
                {
                    jz[i][j] = s[j - 1] - '0';
                    if (jz[i][j] == 1)
                    {
                        ljb[i].push_back(j);
                        rudu[j]++;
                    }
                }
            }
    
            int ff;
            while (1)
            {
                ff = 0;
                for (i = 1; i <= n; i++)
                {
                    if (rudu[i] == 0)
                    {
                        ff = 1;
                        rudu[i]--;
                        for (j = 0; j < ljb[i].size(); j++)
                            rudu[ljb[i][j]]--;
                    }
                }
                if (ff == 0) break;
            }
            for (i = 1; i <= n; i++) if (rudu[i]>0) flag[i] = 1;
            for (i = 0; i <= n; i++) ljb[i].clear();
            for (i = 1; i <= n; i++)
            {
                for (j = 1; j <= n; j++)
                {
                    if (jz[i][j] == 1 && flag[i] == 1 && flag[j] == 1)
                    {
                        ljb[i].push_back(j);
                    }
                }
            }
            for (i = 1; i <= n; i++)
            {
                if (flag[i] == 1)
                {
                    uu = 0;
                    dfs(0, i, i);
                    if (uu == 1) break;
                }
            }
            printf("Case #%d: ", bs);
            if (uu == 1) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    php 下设置cookie问题
    js 页面无滚动条添加滚轮事件
    Python中关于字符串的问题
    Python 字符串相加问题
    ajax 同步和异步
    重叠div鼠标经过事件
    Myeclipse中将项目上传到码云
    eclipse debug的时候提示debug Edit Source Lookup path
    阿里云+wordpress搭建个人博客网站
    centos7 安装mysql
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4552094.html
Copyright © 2011-2022 走看看