您的位置:首页 > 其它

HDU 1869 六度分离【floyd】

2015-04-15 00:35 369 查看
题意:给出n个人,m个关系,问是否满足任意两个人之间的距离通过6个人就可以连接

用floyd就可以了,注意距离是大于7

#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

typedef long long LL;
const int INF = (1<<30)-1;
const int mod=1000000007;
const int maxn=505;
int d[maxn][maxn];
int n,m;

int floyd(){
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);

for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(d[i][j]>7) return 0;
}
}
return 1;
}

int main(){
while(scanf("%d %d",&n,&m)!=EOF){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j) d[i][j]=0;
else d[i][j]=INF;
}
}
for(int i=1;i<=m;i++){
int u,v;
scanf("%d %d",&u,&v);
d[u][v]=d[v][u]=1;
}

if(floyd()) printf("Yes\n");
else printf("No\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: