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

    Triangle LOVE

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 1707    Accepted Submission(s): 729


    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
     
    Author
    BJTU
     
    Source
     
    Recommend
    zhoujiaqi2010
     
    题意分析(转载):
    此题可以一遍拓扑排序判环求解 即只需要找到一个环,
    就必定存在三元环 证明如下: 假设存在一个n元环,
    因为a->b有边,b->a必定没边,反之也成立
    所以假设有环上三个相邻的点a-> b-> c,那么如果c->a间有边,
    就已经形成了一个三元环,如果c->a没边,那么a->c肯定有边,
    这样就形成了一个n-1元环。。。。
    所以只需证明n大于3时一定有三元环即可,显然成立。


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    const int N=2010;
    
    int n,indeg[N];     //存储的是节点的入度
    char str[N][N];
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        int t,cases=0;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            int flag=0;
            memset(indeg,0,sizeof(indeg));  //将所有的节点入度初始化为0
            int i,j;
            for(i=0;i<n;i++){
                scanf("%s",str[i]);
                for(j=0;j<n;j++)
                    if(str[i][j]=='1')  //如果i喜欢j,则把j的入度加1
                        indeg[j]++;
            }
            for(i=0;i<n;i++){
                for(j=0;j<n;j++)
                    if(indeg[j]==0)     //找出入度为0的节点
                        break;
                if(j==n){       //任何一个节点的入度都不为0,说明存在环了,则必有三角恋
                    flag=1;
                    break;
                }else{
                    indeg[j]--; //除去当前结点
                    for(int k=0;k<n;k++)    //把从这个节点出发的引起的节点的入度都减去1
                        if(str[j][k]=='1')
                            indeg[k]--;
                }
            }
            if(flag)
                printf("Case #%d: Yes
    ",++cases);
            else
                printf("Case #%d: No
    ",++cases);
        }
        return 0;
    }
  • 相关阅读:
    React-Native: bios打开VT-x选项
    React-Native:解决真机调试时候Could not get BatchedBridge, make sure your bundle is packaged properly
    node.js异步编程的几种模式
    第29章 电容触摸屏—触摸画板
    第28章 LTDC—液晶显示中英文
    第27章 LTDC/DMA2D—液晶显示
    第26章 FMC—扩展外部SDRAM
    第25章 串行FLASH文件系统FatFs
    第24章 QSPI—读写串行FLASH
    第23章 I2C—读写EEPR
  • 原文地址:https://www.cnblogs.com/jackge/p/3224358.html
Copyright © 2011-2022 走看看