• hdu 4324 Triangle LOVE(拓扑排序)


    Triangle LOVE

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other)
    Total Submission(s) : 16   Accepted Submission(s) : 11

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    Problem Description

    Recently, scientists find that there is love between any of two people. For example, between A and B, if A don’t love B, then B must love A, vice versa. And there is no possibility that two people love each other, what a crazy world!
    Now, scientists want to know whether or not there is a “Triangle Love” among N people. “Triangle Love” means that among any three people (A,B and C) , A loves B, B loves C and C loves A.
      Your problem is writing a program to read the relationship among N people firstly, and return whether or not there is a “Triangle Love”.

    Input

    The first line contains a single integer t (1 <= t <= 15), the number of test cases.
    For each case, the first line contains one integer N (0 < N <= 2000).
    In the next N lines contain the adjacency matrix A of the relationship (without spaces). Ai,j = 1 means i-th people loves j-th people, otherwise Ai,j = 0.
    It is guaranteed that the given relationship is a tournament, that is, Ai,i= 0, Ai,j ≠ Aj,i(1<=i, j<=n,i≠j).

    Output

    For each case, output the case number as shown and then print “Yes”, if there is a “Triangle Love” among these N people, otherwise print “No”.
    Take the sample output for more details.

    Sample Input

    2
    5
    00100
    10000
    01001
    11101
    11000
    5
    01111
    00000
    01000
    01100
    01110
    

    Sample Output

    Case #1: Yes
    Case #2: No
    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    
    using namespace std;
    int i,j,n,t;
    int cnt[2002];
    char mp[2002][2002];
    bool toposort()
    {
        queue<int> Q;
        int num=0;
        for(int i=0;i<n;i++) if (cnt[i]==0) Q.push(i);
        if(Q.empty()) return 0;
        while(!Q.empty())
        {
            int u=Q.front();
            Q.pop();
            num++;
            for(int i=0;i<n;i++)
            if (mp[u][i]=='1')
            {
                cnt[i]--;
                if (cnt[i]==0) Q.push(i);
                if (cnt[i]<0) return 0;
            }
        }
        if (num<n) return 0;
        return 1;
    }
    int main()
    {
        scanf("%d",&t);
        for(int ii=1;ii<=t;ii++)
        {
            scanf("%d",&n);
            memset(cnt,0,sizeof(cnt));
            for(i=0;i<n;i++)
            {
                scanf("%s",mp[i]);
                for(j=0;j<n;j++)
                    if (mp[i][j]=='1') cnt[j]++;
            }
            printf("Case #%d: ",ii);
            if (!toposort()) printf("Yes\n");
                     else printf("No\n");
        }
        return 0;
    }
  • 相关阅读:
    nullptr和NULL
    tmux用于恢复远程屏幕
    如何改变git的默认路径
    scp拷贝文件
    C++头文件<bits/stdc++.h>
    MAME模拟器使用简单教程
    typescript接口扩展
    Typescript中的可索引接口 类类型接口
    typescript函数类型接口
    typescript静态属性 静态方法 抽象类 多态
  • 原文地址:https://www.cnblogs.com/stepping/p/5704615.html
Copyright © 2020-2023  润新知