数据范围小,可以求最短路
#include <cstdio>
#include <algorithm>
using namespace std;
const int INF = 1e9;
int dis[105][105];
int main()
{
int n, m;
while(~scanf("%d%d", &n, &m))
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
dis[i][j] = INF;
for(int i = 0; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
dis[a][b] = dis[b][a] = 1;
}
for(int k = 0; k < n; k++)
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
bool ok = true;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(dis[i][j] > 7) ok = false;
printf("%s\n", ok ? "Yes" : "No");
}
return 0;
}
另一种快一点的方法是求
树中的最长路
待更新