Submission #573351

#TimeUsernameProblemLanguageResultExecution timeMemory
573351MohamedFaresNebiliStranded Far From Home (BOI22_island)C++14
0 / 100
245 ms41072 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; using ll = long long; using ii = pair<int, int>; using vi = vector<int>; #define pb push_back #define pp pop_back #define ff first #define ss second #define lb lower_bound typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set; int N, M, S[200001], par[200001]; vector<int> adj[200001]; set<int> A[200001]; int findSet(int v) { if(par[v] == v) return v; return par[v] = findSet(par[v]); } void unionSet(int u, int v) { u = findSet(u), v = findSet(v); if(u == v) return; if(A[u].size() < A[v].size()) swap(A[u], A[v]); for(auto E : A[v]) A[u].insert(E); par[v] = u; S[u] += S[v]; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> M; vector<ii> E; for(int l = 1; l <= N; l++) { cin >> S[l], E.pb({S[l], l}); A[l].insert(l); par[l] = l; } sort(E.begin(), E.end()); for(int l = 0; l < M; l++) { int U, V; cin >> U >> V; adj[U].pb(V); adj[V].pb(U); } int R = E[N - 1].ss; for(auto u : E) { int U = u.ss; U = findSet(U); for(auto v : adj[U]) { int V = findSet(v); if(S[V] > S[U]) continue; unionSet(U, V); } } string res(N, '0'); R = findSet(R); for(auto u : A[R]) res[u - 1] = '1'; cout << res << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...