http://acm.hdu.edu.cn/showproblem.php?pid=1869
floyd
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<bitset>
using namespace std;
#define MAX 205
int edge[ MAX ][ MAX ] ;
int main()
{
int n, m , a , b;
int flag ;
while( ~scanf( "%d%d" ,&n , &m ) )
{
//memset( edge , 0 , sizeof( edge ) );
flag = 0 ;
for( int i = 0 ; i < MAX ; ++i )
for( int j = 0 ; j < MAX ; ++j )
{
if( i != j )
edge[ i ][ j ] = MAX ;
else
edge[ i ][ j ] = 0 ;
}
while( m-- )
{
scanf( "%d%d", &a , &b ) ;
edge[ a ][ b ] = edge[ b ][ a ] = 1 ;
}
for( int i = 0 ; i < n ; ++i )
for( int j = 0 ; j < n ; ++j )
for( int k = 0 ; k < n ; ++k )
{
if( edge[ j ][ k ] > edge[ j ][ i ] + edge[ i ][ k ] )
edge[ j ][ k ] = edge[ j ][ i ] + edge[ i ][ k ] ;
}
for( int i = 0 ; i < n ; ++i )
for( int j = 0 ; j < i ; ++j )
if( edge[ i ][ j ] > 7 )
{
flag = 1 ;
break ;
}
if( !flag )
cout << "Yes" << endl ;
else
cout << "No" << endl ;
}
return 0 ;
}