我个人看到这个题想的就是直接把每一个点用bfs遍历一遍然后找其中最大值就好了(感觉思路挺简单的){可能是本人太弱没意识到题目的难度}
#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAX 100010
queue<int> q;
vector<int> s[MAX];
int book[MAX];
void bfs(int x)
{
memset(book,0,sizeof(book));
book[x] = 1;
int ans = 0;
q.push(x);//将x加入到队列的首部
while(!q.empty())
{
int z = q.front();
ans = max(ans, z);
for (unsigned int i = 0; i < s[z].size();i++)
{
if(!book[s[z][i]])
{
book[s[z][i]] = 1;
q.push(s[z][i]);
}
}
q.pop();
}
cout << ans << " ";
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= m;i++)
{
int u, v; // 表示边权值
cin >> u >> v;
s[u].push_back(v); //建立标准邻接表
}
for (int i = 1; i <= n;i++)
{
sort(s[i].begin(), s[i].end());
}
for (int i = 1; i <= n;i++)
{
bfs(i);
}
}