#include #if __has_include() #include using namespace atcoder; #endif using namespace std; using Graph = vector>; using vst= vector; using vin= vector; using ll=long long; using ull=unsigned long long; using vll= vector; using P=pair; using pqi=priority_queue, greater>; using pqp=priority_queue, greater

>; //const long double pi=acos(-1); #define ft first #define sd second #define fn front #define pb push_back #define eb emplace_back #define it insert #define vvi vector> #define si(v) int((v).size()) #define pq priority_queue #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rell(i,n) for (ll i=0; i< (ll)(n); i++) #define sot(x) sort(x.begin(), x.end()) #define rese(x) reverse(x.begin(), x.end()) #define gsot(x) sort(x.begin(), x.end(), greater()); #define vnn(x,y,s,name) vector> name(x, vector(y,s)) #define mse(x) memset(x, 0, sizeof(x)) #define all(x) (x).begin(),(x).end() #define mii(x,y,z) min(x,min(y,z)) #define maa(x,y,z) max(x,max(y,z)) #define cps CLOCKS_PER_SEC #define yes cout<<"Yes"<<"\n" #define no cout<<"No"<<"\n" #define cset(x) cout<>n>>m; vin a(n); pqp q; P t; rep(i,n){ cin>>a[i]; t.ft=a[i]; t.sd=i; q.push(t); } Graph G(n); rep(i,m){ int u,v; cin>>u>>v; u--; v--; G[u].eb(v); G[v].eb(u); } int k; cin>>k; vector l(n,false); rep(i,k){ int b; cin>>b; b--; l[b]=true; } vector r; while(!q.empty()){ auto h=q.top(); q.pop(); if(l[h.sd]==false) continue; else{ r.eb(h.sd); l[h.sd]=true; for(auto g:G[h.sd]){ if(a[g]>h.ft) l[g]=(!l[g]); } } } cout<