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 /
114792 /
Delete
Unzip
Name
Size
Permission
Date
Action
a.cpp
1.38
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
#include <bits/stdc++.h> using namespace std; using ll = long long int; const ll MAX = 1e18; struct UnionFind{ vector<ll> par; ll S; UnionFind(ll N):par(N,-1){ S = N; }; ll root(ll A){ if(par[A] < 0) return A; return par[A] = root(par[A]); } bool same(ll A,ll B){ return root(A) == root(B); } bool unite(ll A,ll B){ ll a = root(A),b = root(B); if(a == b) return false; if(par[a] > par[b]) swap(a,b); par[a] += par[b]; par[b] = a; S--; return true; } ll size(ll A){ return par[root(A)] * -1; } ll size(){ return S; } }; int main(){ ll N,M,X,P; cin >> N >> M >> X >> P; vector<ll> B(N),T(M); for(ll i = 0;i < N;i++) cin >> B[i]; B.emplace_back(-MAX); B.emplace_back(MAX); sort(B.begin(),B.end()); for(ll i = 0;i < M;i++) cin >> T[i]; UnionFind UF(M + 1); for(ll i = 0;i < X;i++){ ll u,v; cin >> u >> v; u--; v--; UF.unite(u,v); } ll ans = 0; for(ll i = 0;i < M;i++){ ll dis = MAX; auto it = lower_bound(B.begin(),B.end(),T[i]); dis = min(dis,abs(T[i] - *it)); it--; dis = min(dis,abs(T[i] - *it)); if(dis <= P) ans += UF.unite(i,M); } cout << ans << endl; }