#include <iostream>
#include 
<limits>

int   data[101][101];
int   n;

int main()
{
    
while( scanf("%d",&n), n!= 0 )
    
{
        memset( data, 
0sizeof(data) );

        
for ( int i= 1; i<= n; ++i )
        
{
            
int m;
            scanf(
"%d",&m);

            
for ( int j= 0; j< m; ++j )
            
{
                
int x, y;
                scanf(
"%d%d",&x,&y );

                data[i][x]
= y;
            }

        }


        
for ( int k= 1; k<= n; ++k )
        
{
            
for ( int i= 1; i<= n; ++i )
                
for ( int j= 1; j<= n; ++j )
                    
if ( data[i][k]> 0 && data[k][j]> 0 && (data[i][k]+ data[k][j]< data[i][j]  || data[i][j]== 0 ) )
                        data[i][j]
= data[i][k]+ data[k][j];
        }


        
int   min= INT_MAX;
        
int   k= 1;

        
for ( int i= 1; i<= n; ++i )
        
{
            
int  m= INT_MIN;
            
bool isok= true;

            
for ( int j= 1; j<= n; ++j )
            
{
                
if ( i!= j && data[i][j]== 0 )
                
{
                    isok
= false;
                    
break;
                }


                
if ( i!= j && data[i][j]> m ) m= data[i][j];
            }


            
if ( m< min && isok ) 
            
{
                min
= m;
                k
= i;
            }

        }


        
if ( min!= INT_MAX ) printf("%d %d\n", k, min );
        
else                 printf("disjoint\n");
    }


    
return 0;
}

posted on 2008-10-02 20:59 Darren 阅读(159) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理