hdu 六度分离

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\n");
58         else printf("No\n");
59     }
60     return 0;
61 }
View Code

 

posted @ 2014-04-20 14:24  null1019  阅读(139)  评论(0编辑  收藏  举报