题解:CF2172M Maximum Distance To Port
思路
按照题意模拟即可,使用广度优先搜索求最短路即可。
代码
#include <bits/stdc++.h>
using namespace std;
vector <int> mp[214514], v[214514];
int dis[214514];
int n, m, k;
int vis[214514];
int main()
{
cin >> n >> m >> k;
//输入
for (int i = 1; i <= n; i ++) {
int x;
cin >> x;
mp[x].push_back (i);
}//统计每个货物都有哪个地儿弄,下面统计答案用
for (int i = 1; i <= m; i ++)
{
int x, y;
cin >> x >> y;
v[x].push_back (y);
v[y].push_back (x);
}//建边
queue <int> q;
q.push(1);
vis[1] = 1;
while (q.size())
{
int t = q.front ();
q.pop();
for (auto i : v[t])
{
if (!vis[i])
{
dis[i] = dis[t] + 1;
vis[i] = 1;
q.push(i);
}
}
}//bfs求最短路
for (int i = 1; i <= k; i ++)
{
int maxx = 0;
for (auto j : mp[i])
{
maxx = max (maxx, dis[j]);
}
cout << maxx << " ";
}//统计答案,输出
}