Linux tsuru-no-tsurugi 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.0.18 & Your IP : 216.73.217.105
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
submit2 /
114799 /
Delete
Unzip
Name
Size
Permission
Date
Action
a.cpp
8.71
KB
-rwxr-x---
2024-08-28 22:35
cerror.txt
0
B
-rwxr-x---
2024-08-28 22:35
error.txt
0
B
-rwxr-x---
2024-08-28 22:35
submit_info.txt
178
B
-rwxr-x---
2024-08-28 22:35
Save
Rename
#pragma region template #include<bits/stdc++.h> using namespace std; //other #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; //tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> s; // #include<atcoder/all> // using namespace atcoder; // #include "atcoder/modint.hpp" // using mint = atcoder::modint998244353; // using mint2 = atcoder::modint1000000007; #define int long long #define pb push_back #define eb emplace_back #define ep emplace #define len(a) (int)a.size() #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") //using using ll=long long; using ld=long double; using ull=unsigned long long; using uint=unsigned; using pcc=pair<char,char>; using pii=pair<int,int>; using pll=pair<ll,ll>; using pdd=pair<ld,ld>; using vi=vector<int>; using vl=vector<ll>; using vvi=vector<vi>; using vvl=vector<vl>; using vvvi=vector<vvi>; using vvvl=vector<vvl>; template<class T>using pqmin=priority_queue<T,vector<T>,greater<T>>; template<class T>using pqmax=priority_queue<T>; template<typename T>int chmax(T &a,T b){if(a<b){a=b;return true;}return false;} template<typename T>int chmin(T &a,T b){if(a>b){a=b;return true;}return false;} const ll LINF=0x1fffffffffffffff; const int INF=0x3fffffff; const int MOD=998244353; const int MOD2=1000000007; const ld PI=3.1415926535897932384626433832795028841971; const ld DINF=numeric_limits<ld>::infinity(); const ld EPS=1e-9; const ll di[]={0,1,0,-1,1,-1,1,-1}; const ll dj[]={1,0,-1,0,1,1,-1,-1}; template<class T> constexpr auto min(T a,T b,T c){ return min(a,min(b,c)); } template<class... T> constexpr auto min(T... a){ return min(initializer_list<common_type_t<T...>>{a...}); } template<class T> constexpr auto max(T a,T b,T c){ return max(a,max(b,c)); } template<class... T> constexpr auto max(T... a){ return max(initializer_list<common_type_t<T...>>{a...}); } #define overload4(_1,_2,_3,_4,name,...) name #define overload3(_1,_2,_3,name,...) name #define rep1(n) for(ll i=0;i<n;++i) #define rep2(i,n) for(ll i=0;i<n;++i) #define rep3(i,a,b) for(ll i=a;i<b;++i) #define rep4(i,a,b,c) for(ll i=a;i<b;i+=c) #define rep(...) overload4(__VA_ARGS__,rep4,rep3,rep2,rep1)(__VA_ARGS__) #define rrep1(n)for(ll i=n;i--;) #define rrep2(i,n)for(ll i=n;i--;) #define rrep3(i,a,b)for(ll i=b;i-->(a);) #define rrep4(i,a,b,c)for(ll=(a)+((b)-(a)-1)/(c)*(c);i>=(a);i-=c) #define rrep(...) overload4(__VA_ARGS__,rrpe4,rrep3,rrep2,rrep1)(__VA_ARGS__) #define all1(i) begin(i),end(i) #define all2(i,a) begin(i),begin(i)+a #define all3(i,a,b) begin(i)+a,begin(i)+b #define all(...) overload3(__VA_ARGS__,all3,all2,all1)(__VA_ARGS__) #define sum(...) accumulate(all(__VA_ARGS__),0LL) #define dsum(...) accumulate(all(__VA_ARGS__),0.0L) #define Msum(...) accumulate(all(__VA_ARGS__),0_M) #define elif else if #define INT(...) int __VA_ARGS__;input(__VA_ARGS__) #define LL(...) ll __VA_ARGS__;input(__VA_ARGS__) #define ULL(...) ull __VA_ARGS__;input(__VA_ARGS__) #define STR(...) string __VA_ARGS__;input(__VA_ARGS__) #define CHR(...) char __VA_ARGS__;input(__VA_ARGS__) #define DBL(...) double __VA_ARGS__;input(__VA_ARGS__) #define LD(...) ld __VA_ARGS__;input(__VA_ARGS__) //io //in void scan(){} // void scan(int &a){cin>>a;} void scan(unsigned &a){cin>>a;} void scan(long& a){cin>>a;} void scan(long long& a){cin>>a;} void scan(unsigned long long&a){cin>>a;} void scan(char& a){cin>>a;} void scan(float& a){cin>>a;} void scan(double& a){cin>>a;} void scan(long double& a){cin>>a;} void scan(vector<bool>& a){ for(unsigned i = 0; i < a.size(); i++){ int b; scan(b); a[i] = b; } } void scan(char a[]){ scanf("%s", a); } void scan(string& a){cin>>a;} template<class T> void scan(vector<T>&); template<class T, size_t size> void scan(array<T, size>&); template<class T, class L> void scan(pair<T, L>&); template<class T, size_t size> void scan(T(&)[size]); template<class T> void scan(vector<T>& a){ for(auto&& i : a) scan(i); } template<class T> void scan(deque<T>& a){ for(auto&& i : a) scan(i); } template<class T, size_t size> void scan(array<T, size>& a){ for(auto&& i : a) scan(i); } template<class T, class L> void scan(pair<T, L>& p){ scan(p.first); scan(p.second); } template<class T, size_t size> void scan(T (&a)[size]){ for(auto&& i : a) scan(i); } template<class T> void scan(T& a){ cin >> a; } void input(){} template<class Head,class...Tail> void input(Head& head,Tail&... tail){scan(head);input(tail...);} //out void puts(){ putchar(' '); } void puts(bool a){ printf("%d", a); } // void puts(int a){ printf("%d", a); } void puts(unsigned a){ printf("%u", a); } void puts(long a){ printf("%ld", a); } void puts(long long a){ printf("%lld", a); } void puts(unsigned long long a){ printf("%llu", a); } void puts(char a){ printf("%c", a); } void puts(char a[]){ printf("%s", a); } // void puts(const char a[]){ printf("%s", a); } void puts(float a){ printf("%.15f", a); } void puts(double a){ printf("%.15f", a); } void puts(long double a){ printf("%.15Lf", a); } void puts(const string& a){ for(auto&& i : a) puts(i); } template<class T> void puts(const complex<T>& a){ if(a.real() >= 0) puts('+'); puts(a.real()); if(a.imag() >= 0) puts('+'); puts(a.imag()); puts('i'); } template<class T> void puts(const vector<T>&); template<class T, size_t size> void puts(const array<T, size>&); template<class T, class L> void puts(const pair<T, L>& p); template<class T, size_t size> void puts(const T (&)[size]); template<class T> void puts(const vector<T>& a){ if(a.empty()) return; puts(a[0]); for(auto i = a.begin(); ++i != a.end(); ){ putchar(' '); puts(*i); } } template<class T> void puts(const deque<T>& a){ if(a.empty()) return; puts(a[0]); for(auto i = a.begin(); ++i != a.end(); ){ putchar(' '); puts(*i); } } template<class T> void puts(const set<T>& a){ if(a.empty()) return; puts(*a.begin()); for(auto i = a.begin(); ++i != a.end(); ){ putchar(' '); puts(*i); } } template<class T> void puts(const multiset<T>& a){ if(a.empty()) return; puts(*a.begin()); for(auto i = a.begin(); ++i != a.end(); ){ putchar(' '); puts(*i); } } template<class T, size_t size> void puts(const array<T, size>& a){ puts(a[0]); for(auto i = a.begin(); ++i != a.end(); ){ putchar(' '); puts(*i); } } template<class T, class L> void puts(const pair<T, L>& p){ puts(p.first); putchar(' '); puts(p.second); } template<class T, size_t size> void puts(const T (&a)[size]){ puts(a[0]); for(auto i = a; ++i != end(a); ){ putchar(' '); puts(*i); } } template<class T> void puts(const T& a){ cout << a; } int print(){ putchar('\n'); return 0; } template<class T> int print(const T& t){ puts(t); putchar('\n'); return 0; } template<class Head, class... Tail> int print(const Head& head, const Tail&... tail){ puts(head); putchar(' '); print(tail...); return 0; } #pragma endregion #pragma region commonly used int digitsum(string s){ int res=0; rep(i,(int)s.size()){ res+=s[i]-'0'; } return res; } #pragma endregion class union_find{ public: int par[200009]; int siz[200009]; //N頂点のunionfindを作成 void init(int n){ rep(i,n)par[i]=-1; //最初は親がない rep(i,n)siz[i]=1; //最初はグループの頂点が1 } //頂点xの根を返す関数 int root(int x){ while(true){ if(par[x]==-1)break; //一個先(親)がなければここが根 x=par[x]; //一個先(親)に進む } return x; } //要素uとvを統合する関数 void unite(int u,int v){ int rootu=root(u); int rootv=root(v); if(rootu==rootv) return; //uとvが同じグループの時処理は行わない if(siz[rootu]<siz[rootv]){ par[rootu]=rootv; siz[rootv]=siz[rootu]+siz[rootv]; }else{ par[rootv]=rootu; siz[rootu]=siz[rootu]+siz[rootv]; } } bool same(int u,int v){ if(root(u)==root(v))return true; return false; } }; union_find uf; signed main(){ INT(n,m,x,p); vi b(n);input(b); vi t(m);input(t); sort(all(b)); // sort(all(t)); vi u(x),v(x);rep(i,x)input(u[i],v[i]); uf.init(m); rep(i,x){ u[i]--;v[i]--; uf.unite(u[i],v[i]); } set<int> must; rep(i,m){ int ps=lower_bound(all(b),t[i])-b.begin(); if(ps!=len(b)){ if(abs(b[ps]-t[i])<=p)must.ep(i); } if(ps!=0){ if(abs(b[ps-1]-t[i])<=p)must.ep(i); } } // print(must); set<int> res; for(auto e:must){ res.ep(uf.root(e)); } print(len(res)); }