#include using namespace std; struct uns_t {} uns; template auto vec(Element init, Head arg, Args ...args) { if constexpr (sizeof...(Args) == 0) return std::vector(arg, init); else return std::vector(arg, vec(init, args...)); } template auto vec(uns_t, Head arg, Args ...args) { return vec(Element(), arg, args...); } int main() { int n, m, s, t; cin >> n >> m >> s >> t; --s; --t; auto p = vec(uns, n); for (auto &e : p) cin >> e; auto g = vec(uns, n, 0); for (int i = 0; i < m; ++i) { int a, b; cin >> a >> b; --a; --b; g[a].push_back(b); g[b].push_back(a); } int x = p[s], y = 0; auto vis = vec(false, n); priority_queue> que; que.push({ p[s], s }); while (!que.empty()) { auto [c, u] = que.top(); que.pop(); if (vis[u]) continue; vis[u] = true; y += c < x; x = min(x, c); for (auto v : g[u]) { if (vis[v]) continue; que.push({ p[v], v }); } } cout << y << endl; }