HDU 1869 六度分离(简单Floyd)

时间:2021-04-15 03:50:58

HDU 1869 六度分离(简单Floyd)

http://acm.hdu.edu.cn/showproblem.php?pid=1869

题意:

        给你N个人以及他们之间的M个关系,现在问你任意两个人之间是否可以通过最多6个人就联系起来.(其实就是他们之间的最短距离要<=7)

分析:

        直接用Floyd算法求任意两人之间的距离,看看是否有距离>7的一对点即可.

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 1e9
using namespace std;
const int maxn = 100+10;
int n,m;
int d[maxn][maxn];
bool floyd()
{
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(d[i][k]<INF && d[k][j]<INF)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(d[i][j]>7) return false;
return true;
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
d[i][j]= i==j?0:INF;
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
d[u][v]=d[v][u]=1;
}
printf("%s\n",floyd()?"Yes":"No");
}
return 0;
}