zoukankan      html  css  js  c++  java
  • hdu 4324 Triangle LOVE 拓扑排序

    #include<stdio.h>
    #include<stack>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int mp[2000 + 5][2000 + 5], in[2000 + 5],u[2000+5];
    int main()
    {
        int _, i, j, k, n, cas = 0,t;
        char s[2000 + 5];
        bool flag;
        scanf("%d", &_);
        while (_--)
        {
            memset(mp, 0, sizeof(mp));
            memset(in,0,sizeof(in));
            memset(u,0,sizeof(u));
            scanf("%d", &n);
            flag=0;
            for (i = 0; i < n; i++)
            {
                scanf("%s", s);
                for (j = 0; j < n; j++)
                {
                    if (s[j] == '1')
                    {
                        mp[i][j] = 1;
                        in[j]++;
                    }
                }
            }
            stack<int>s;
            while(!s.empty()) s.pop();
            for(i=0;i<n;i++)
                {
                    if(in[i]==0) s.push(i);
                }
    
            while(!s.empty())
            {
                t=s.top();
                u[t]=1;
                s.pop();
                for(i=0;i<n;i++)
                {
                    if(mp[t][i])
                    {
                        in[i]--;
                        if(in[i]==0) s.push(i);
                    }
                }
            }
            for (i = 0; i < n; i++)
            {
                if(u[i]) continue;
                for (k = i+1; k < n; k++)
                {
                    if(u[k]) continue;
                    if (!mp[i][k]||mp[k][i]) continue;
                    for (j = 0; j < n; j++)
                    {
                        if(u[j]) continue;
                        if (mp[k][j] && mp[j][i]&&!mp[j][k]&&!mp[i][j])
                        {
                            flag = 1;
                            break;
                        }
                    }
                    if (flag) break;
                }
                if (flag) break;
            }
    
            if (!flag)
                printf("Case #%d: No
    ", ++cas);
            else
                printf("Case #%d: Yes
    ", ++cas);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    [atARC088F]Christmas Tree
    [atARC109F]1D Kingdom Builder
    [luogu4259]寻找车位
    [atARC087F]Squirrel Migration
    [atARC087E]Prefix-free Game
    [atARC110F]Esoswap
    [atARC110E]Shorten ABC
    [atARC084D]Small Multiple
    [atARC083F]Collecting Balls
    [hihocoder][Offer收割]编程练习赛49
  • 原文地址:https://www.cnblogs.com/xryz/p/4847879.html
Copyright © 2011-2022 走看看