Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. const int maxn = 1e5+1;
  3. const int maxm = 2e5+1;
  4. using namespace std;
  5.  
  6. vector<int> adj[maxn];
  7. queue<int> q;
  8. bool avail[maxn];
  9. int trace[maxn];
  10. int diff[maxm];
  11. int minDiff;
  12. int n,m,maxx;
  13. int l = 1;
  14. int h;
  15.  
  16. void addEdge(int u, int v)
  17. {
  18.     adj[u].push_back(v);
  19.     adj[v].push_back(u);
  20. }
  21.  
  22. void visit(int u, int mid)
  23. {
  24.     avail[u] = false;
  25.     cout << u << endl;
  26.     for(int v : adj[u])
  27.     {
  28.         cout << abs(diff[u] - diff[v]) << " " << mid << endl;
  29.         if(avail[v] && abs(diff[u]-diff[v]) <= mid)
  30.         {
  31.             trace[v] = u;
  32.             visit(v,mid);
  33.         }
  34.     }
  35. }
  36.  
  37. void solve()
  38. {
  39.     //cout << maxx << endl;
  40.     int mid;
  41.     l = 1;
  42.     h = maxx;
  43.     while(l <= h)
  44.     {
  45.         mid = (l+h)/2;
  46.         fill(avail,avail+n,true);
  47.         visit(1,mid);
  48.         cout << l << " " << h << " " << mid << " " << avail[n] << endl;
  49.         if(avail[n-1]==false)
  50.         {
  51.             minDiff = mid;
  52.             h = mid - 1;
  53.         }
  54.         else
  55.             l = mid + 1;
  56.     }
  57.     cout << minDiff;
  58. }
  59.  
  60. int main()
  61. {
  62.     //freopen("wildlife.inp","r",stdin);
  63.     int u,v;
  64.     cin >> n >> m;
  65.     for(int i = 1; i <= n; ++i)
  66.         cin >> diff[i];
  67.     for(int i = 1; i <= m; ++i)
  68.     {
  69.         cin >> u >> v;
  70.         addEdge(u,v);
  71.     }
  72.     for(int i = 1; i < n; ++i)
  73.         maxx = max(diff[i],diff[i+1]);
  74.     solve();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement