zoukankan      html  css  js  c++  java
  • Triangle LOVE(拓扑排序)

    Triangle LOVE

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other)
    Total Submission(s) : 49   Accepted Submission(s) : 30
    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). A[sub]i,j[/sub] = 1 means i-th people loves j-th people, otherwise A[sub]i,j[/sub] = 0. It is guaranteed that the given relationship is a tournament, that is, A[sub]i,i[/sub]= 0, A[sub]i,j[/sub] ≠ A[sub]j,i[/sub](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
    代码:
     
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<queue>
     4 using namespace std;
     5 const int MAXN=2010;
     6 int map[MAXN][MAXN];
     7 int que[MAXN],flot,N,tot=0;
     8 char c[MAXN][MAXN];
     9 queue<int>dl;
    10 void topsort(){
    11     for(int i=1;i<=N;i++)
    12         if(!que[i])dl.push(i);
    13         //printf("%d",dl.size());
    14         //puts("asfaf");
    15     while(!dl.empty()){
    16         int k=dl.front();
    17         flot++;
    18         dl.pop();
    19         que[k]=-1;
    20        // printf("%d",dl.size());
    21         for(int j=1;j<=N;j++){
    22             if(map[k][j])que[j]--;
    23             if(!que[j])dl.push(j);
    24         }
    25     }
    26    // puts("asfaf");
    27     if(flot==N)printf("Case #%d: No
    ",tot);
    28     else printf("Case #%d: Yes
    ",tot);
    29 }
    30 void initial(){
    31     memset(que,0,sizeof(que));
    32     while(!dl.empty()){
    33         dl.pop();
    34     }
    35     flot=0;
    36 }
    37 int main(){
    38     int T;
    39     scanf("%d",&T);
    40     while(T--){
    41             tot++;
    42             initial();
    43         scanf("%d",&N);
    44         //puts("asfaf");
    45         //printf("%d
    ",N);
    46         for(int i=0;i<N;i++)scanf("%s",c[i]);
    47         for(int i=1;i<=N;i++){
    48             for(int j=1;j<=N;j++){
    49             map[i][j]=c[i-1][j-1]-'0';
    50                 if(map[i][j])que[j]++;
    51             }
    52         }
    53        // puts("asfaf");
    54        /* for(int i=1;i<=N;i++){
    55             for(int j=1;j<=N;j++){
    56             printf("%d",map[i][j]);
    57             }
    58                 puts("");
    59         }*/
    60         //puts("asfaf");
    61         topsort();
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4732543.html
Copyright © 2011-2022 走看看