#include  < stdio.h >
#include 
< stdlib.h >
#include 
< string .h >

#define  N 5001

struct  Node
{
    
int  length;
    
int  weight;
};

int  n;
Node d[N];
bool  visite[N];

int  cmp(  const   void *  a,  const   void *  b )
{
    Node
*  ta =  (Node * )a;
    Node
*  tb =  (Node * )b;
    
    
if ( ta -> length ==  tb -> length )  return  ta -> weight -  tb -> weight;
    
    
return  ta -> length -  tb -> length;
}

int  main()
{
    
int  test;
    scanf(
" %d " & test);
    
    
while ( test --  )
    {
        scanf(
" %d " & n );
        
for int  i =   0 ; i <  n;  ++ i )
        scanf(
" %d%d " ,      & d[i].length,  & d[i].weight );
        
        qsort( d, n, 
sizeof (d[ 0 ]), cmp );
        memset( visite, 
false sizeof (visite) );
    
        
int  b =  d[ 0 ].weight;
        
int  num =   0 ;
        
int  k =   0 ;
        
        
while true  )
        {
            
bool  ok =   false ;
            
            
if ( k ==   - 1  )  break ;
            b
=  d[k].weight;   num ++ ;
            
            
int  be =  k;  k =   - 1 ;
            
            
for int  i =  be; i <  n;  ++ i )
            {
                
if ( d[i].weight >=  b  &&   ! visite[i] )
                {
                    visite[i]
=   true ;
                    b
=  d[i].weight;
                }
                
else   if ! ok  &&   ! visite[i] )   {   k =  i;  ok =   true ;  }
            } 
        }
        
        printf(
" %d\n " , num );
    }
    
    
return   0 ;
}
posted on 2008-10-30 20:55 Darren 阅读(317) 评论(0)  编辑 收藏 引用 所属分类: 搜索

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