Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- const int N=200005;
- int n,m,a[N],d[N];
- stack<int>st;
- vector<int>e[N];
- int main()
- {
- cin>>n>>m;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- for(int i=1;i<=m;i++)
- {
- int u,v;
- cin>>u>>v;
- e[u].push_back(v);
- e[v].push_back(u);
- }
- for(int i=1;i<=n;i++)
- st.push(i);
- while(st.size())
- {
- int u=st.top();
- st.pop();
- for(auto v:e[u]) ///v este vecin a lui u
- {
- int c;
- if(a[v]>a[u]) ///calc traseul de la v->u
- c=a[v]-a[u];
- else
- c=2*(a[v]-a[u]);
- c+=d[u]; /// se calculeaza costul traseului v->u->...
- if(c>d[v]) ///am gasit un cost mai bun
- {
- d[v]=c; ///actualizez costul v->...
- st.push(v); ///adaug nodul v in stiva
- }
- }
- }
- cout<<d[1]<<'\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement