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) : 40   Accepted Submission(s) : 27
    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
     

    Author
    BJTU
     

    Source
    2012 Multi-University Training Contest 3


    #include<stdio.h>
    #include<string.h>
    char map[2010][2010];
    int dre[2010];
    int main()
    {
    	int t,cot=0;
    	scanf("%d",&t);
    	while(t--)
    	{
    		int n,i,j,p;
    		//memset(map,0,sizeof(map));
    		scanf("%d",&n);
    		memset(dre,0,sizeof(dre));
    		getchar();
    		for(i=0;i<n;i++)
    		{
    			scanf("%s",&map[i]);
    			getchar();
    			for(j=0;j<n;j++)
    			if(map[i][j]=='1')
    			dre[j]++;
    		}
    		for(i=0;i<n;i++)
    		{
    			p=-1;
    			for(j=0;j<n;j++)
    			{
    				if(dre[j]==0)
    				{
    					dre[j]--;
    					p=j;
    					break;
    				}
    			}
    			if(p==-1)
    				break;
    			for(j=0;j<n;j++)
    			{
    				if(map[p][j]=='1')
    				{
    					dre[j]--;
    					map[p][j]='0';
    				}
    			}
    		}
    		printf("Case #%d: ",++cot);
    		if(i<n)
    		{
    			printf("Yes
    ");
    		}
    		else
    			printf("No
    ");
    	}
    }


  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273826.html
Copyright © 2011-2022 走看看