Submission #1172986

#TimeUsernameProblemLanguageResultExecution timeMemory
1172986CiprianAirplane (NOI23_airplane)C++20
22 / 100
43 ms17480 KiB

#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...