zoukankan      html  css  js  c++  java
  • HDU2094 产生冠军

        题中先用并查集判定是否所有点都有联系,即能够拼成一个连通的无向图。 再判定入度为零的点是否为1即可。

    代码如下:

    #include <stdio.h>
    #include <string.h>
    
    char name[2010][50];
    
    int cnt, N, dg[2010], hash[2010], set[2010];
    
    int find( char *n )
    {
    	int i;
    	for( i= 0; i< cnt; ++i )
    	{
    		if( strcmp( n, name[i] )== 0 )
    		{
    			return i;
    		}
    	}
    	strcpy( name[cnt], n );
    	return cnt++;    // 在return的时候把cnt自增
    }
    
    int find( int x )
    {
        return set[x]= x== set[x]? x: find( set[x] );
    }
    
    void merge( int x, int y )
    {
        int a= find( x ), b= find( y );
        set[a]= b;
    }
    
    int main(  )
    {
    	while( scanf( "%d", &N ), N )
    	{
    		char n1[50], n2[50];
    		cnt= 0;
    		int edge= 0;
    		memset( dg, 0, sizeof( dg ) );
    		memset( hash, 0 ,sizeof( hash ) );
    		for( int i= 0; i< 2010; ++i )
    		{
    		    set[i]= i;
    		}
    		for( int i= 1; i<= N; ++i )
    		{
    			scanf( "%s %s", n1, n2 );
    			int a= find( n1 ), b= find( n2 );
    			if( find( a )!= find( b ) )
    			{
    			    merge( a, b );
    			    edge++;
    			} 
    			dg[b]++;
    		}
    		if( edge!= cnt- 1 )
    		{
    		    printf( "No\n" );
    		    continue;
    		}
    		int shit= 0;
    		for( int i= 0; i< cnt; ++i )
    		{
    		    if( dg[i]== 0 )
    		    {
    		        shit++;
    		    }
    		}
    		printf( shit== 1? "Yes\n": "No\n" );
    	}
    }
    
     
    
  • 相关阅读:
    浏览器返回按钮不会触发onLoad事件
    TCP慢启动算法
    TCP协议三次握手过程分析
    关于新增和编辑
    Mock, 让你的开发脱离接口
    到底数据驱动是个什么玩意
    pagination分页插件
    关于状态切换
    在线占位图网站
    Arduino nano 与 w5500模块的连接与调试
  • 原文地址:https://www.cnblogs.com/Lyush/p/2108593.html
Copyright © 2011-2022 走看看