#include <bits/stdc++.h>
using namespace std;
#define int long long
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
vector<int>h(n+2);
for(int i=1; i<=n; i++)cin>>h[i];
vector<pair<int,int>>adj[n+2];
for(int i=0; i<m; i++){
int x,y;
cin>>x>>y;
int w=abs(h[x]-h[y]);
adj[x].push_back({-w, y});
adj[y].push_back({-w,x});
}/*priority_queue<pair<int, int>>q;
vector<int>dist(n+2, -1e9);
dist[1]=0;
q.push({0, 1});
vector<bool> check(n+2, false);
while(!q.empty()){
auto p=q.top();
q.pop();
if(check[p.second])continue;
check[p.second]=true;
for(auto e: adj[p.second]){
if(dist[p.second]+e.first>dist[e.second]){
dist[e.second]=dist[p.second]+e.first;
q.push({dist[e.second], e.second});
}
}
}cout<<-dist[n]<<endl;
*/
if(m==n-1){
vector<int>mx(n+2);
for(int i=n; i>=1; i--){
mx[i]=max(mx[i+1], h[i]);
}int indx=0;
for(int i=1; i<=n; i++){
if(h[i]==mx[1]){
indx=i;
break;
}
}int minutes=0;
int r=0;
for(int i=2; i<=indx; i++){
if(r+1>=h[i]){
minutes++;
r=min(r+1, mx[1]);
}else{
minutes+=h[i]-r;
r=h[i];
}
}//cout<<r<<endl;
for(int i=indx+1; i<=n; i++){
r=max(r-1, mx[i]);
minutes++;
//cout<<r<<endl;
}
cout<<minutes+r<<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... |