Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int H[2<<17];
- vector<int>G[2<<17];
- long D[2<<17];
- main(){
- int n,m;
- scanf("%d%d",&n,&m);
- for(int i=0;i<n;i++)scanf("%d",&H[i]);
- for(int i=0;i<m;i++){
- int u,v;
- scanf("%d%d",&u,&v);
- u--,v--;
- G[u].push_back(v);
- G[v].push_back(u);
- }
- priority_queue<pair<long,int>>Q;
- Q.push({H[0],0});
- fill(D,D+n,-1e18);
- D[0]=H[0];
- long ans=0;
- while(!Q.empty()){
- auto[d,u]=Q.top();
- Q.pop();
- if(d<D[u])continue;
- ans=max(ans,d-H[u]);
- for(int v:G[u]){
- int c=min(H[u]-H[v],0);
- if(d+c>D[v])D[v]=d+c,Q.push({d+c,v});
- }
- }
- printf("%ld\n",ans);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement