http://acm.hdu.edu.cn/showproblem.php?pid=1869
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 500 5 using namespace std; 6 const int inf=1<<28; 7 8 int g[maxn][maxn]; 9 bool vis[maxn][maxn]; 10 int n,m,a,b; 11 12 int main() 13 { 14 while(scanf("%d%d",&n,&m)!=EOF) 15 { 16 memset(vis,false,sizeof(vis)); 17 for(int i=0; i<n; i++) 18 { 19 for(int j=0; j<n; j++) 20 { 21 if(i==j) g[i][j]=0; 22 else g[i][j]=inf; 23 } 24 } 25 for(int i=0; i<m; i++) 26 { 27 scanf("%d%d",&a,&b); 28 g[a][b]=g[b][a]=1; 29 vis[a][b]=vis[b][a]=true; 30 } 31 for(int k=0; k<n; k++) 32 { 33 for(int i=0; i<n; i++) 34 { 35 for(int j=0; j<n; j++) 36 { 37 if(g[i][j]>g[i][k]+g[k][j]) 38 { 39 g[i][j]=g[i][k]+g[k][j]; 40 } 41 } 42 } 43 } 44 bool flag=true; 45 for(int i=0; i<n; i++) 46 { 47 for(int j=0; j<n; j++) 48 { 49 if(g[i][j]>7&&!vis[i][j]&&i!=j) 50 { 51 flag=false; 52 break; 53 } 54 } 55 if(!flag) break; 56 } 57 if(flag) printf("Yes "); 58 else printf("No "); 59 } 60 return 0; 61 }