HDU 1869 六度分离(最短路)

来源:互联网 发布:linux 修改22端口 编辑:程序博客网 时间:2024/06/06 07:38

【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=1869

题目意思

有一群人,问是否满足六度分离(任意2个人通过6个人最终会认识)。

解题思路

没什么好说的,初始为1,跑遍佛洛依德判断是否有大于7的两个人就好了

代码部分

#include <bits/stdc++.h>using namespace std;#define LL long longconst int maxn=1005;const int INF=0x3f3f3f;int n,m,s,t;int a[maxn][maxn];int main(){    while (scanf("%d %d",&n,&m)!=EOF)    {        bool fal=0;        memset(a,INF,sizeof(a));        for (int i=0;i<n;i++)            a[i][i]=0;        for (int i=0; i<m; i++)        {            int x,y;            scanf("%d %d",&x,&y);            a[x][y]=1;            a[y][x]=1;        }        for (int k=0;k<n;k++)            for(int i=0; i<n; i++)                for(int j=0; j<n; j++)                    if(a[i][j]>(a[i][k]+a[k][j]))                    {                        a[i][j]=a[i][k]+a[k][j];                        a[j][i]=a[i][k]+a[k][j];                    }        for (int i=0;i<n;i++)            for (int j=0;j<n;j++)        {            if (a[i][j]>7)            {                //cout<<i<<j<<' '<<a[i][j]<<endl;                fal=1;            }        }        if (!fal)            cout<<"Yes"<<endl;        else            cout<<"No"<<endl;    }}