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

 

你可能感兴趣的:(HDU)