HDU 1869 六度分离

来源:互联网 发布:酒吧骰子软件 编辑:程序博客网 时间:2024/06/05 16:41

题目链接

题目意思

给你N个人,编号从0~N-1,接着的M行给你A和B的关系,现在让你判断是否两个人之间最多隔6个人可以让两个人相互联系。

解题思路

将两个人之间的距离定为1,那么用Floyd跑一遍,如果两个人之间的最短路大于7,那么就是两个人之间最少相隔了七个人,那么定理不存在。

代码部分

#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <queue>using namespace std;const int INF=9999;int n,m;int map[150][150];int dis[150];void floyd(){    for(int k=0; k<n; k++)        for(int i=0; i<n; i++)            for(int j=0; j<n; j++)                map[i][j]=min(map[i][j],map[i][k]+map[k][j]);}int main(){    int a,b;    while(scanf("%d%d",&n,&m)!=EOF)    {        bool flag=true;        memset(map,INF,sizeof(map));        for(int i=0; i<m; i++)        {            scanf("%d%d",&a,&b);            map[a][b]=map[b][a]=1;        }        floyd();        for(int i=0; i<n; i++)            for(int j=0; j<n; j++)            {                if(map[i][j]>7)                    flag=false;            }        if(flag)            printf("Yes\n");        else            printf("No\n");    }    return 0;}