#include <bits/stdc++.h>
#define int long long
#define first first
const int N = 2e5 + 7;
using namespace std;
vector<pair<int, int>> graph[N];
int a[N];
vector<int> dijkstra(int start, vector<int> &dist)
{
set<pair<int, int>> q;
vector<int> vis(dist.size(), 0);
q.insert({0, start});
dist[start] = 0;
int node, weight;
while (q.size())
{
node = q.begin()->second;
q.extract(*q.begin());
if (vis[node])
continue;
vis[node] = 1;
for (auto i : graph[node])
{
if (dist[i.second] > dist[node] + 1 + max(dist[node] + 1, a[i.second]) - (dist[node] + 1))
{
dist[i.second] = dist[node] + 1 + max(dist[node] + 1, a[i.second]) - (dist[node] + 1);
q.insert({dist[i.second], i.second});
}
}
}
return dist;
}
void solve()
{
int n, m;
cin >> n >> m;
// int s, t, l, k;
// cin >> s >> t >> l >> k;
int u, v, w;
for (int i = 0; i < n; i++)
{
cin >> a[i + 1];
}
for (int i = 0; i < m; i++)
{
cin >> u >> v;
w = 1;
graph[u].push_back({w, v});
graph[v].push_back({w, u});
}
vector<int> dist1(n + 1, 1e18);
vector<int> distn(n + 1, 1e18);
dijkstra(1, dist1);
dijkstra(n, distn);
int ans = 1e18;
for (int i = 1; i <= n; i++)
{
cout << dist1[i] << " ";
}
cout << endl;
for (int i = 1; i <= n; i++)
{
cout << distn[i] << " ";
}
cout << endl;
for (int i = 1; i < n; i++)
{
ans = min(ans, max(dist1[i], distn[i]) * 2);
}
for (int i = 0; i < n; i++)
{
for (auto j : graph[i])
{
ans = min(ans, dist1[i] + 1 + distn[j.second]);
}
}
cout << ans << endl;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int t = 1;
// cin >> t;
while (t--)
{
solve();
cout << endl;
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |