Submission #1295881

#TimeUsernameProblemLanguageResultExecution timeMemory
1295881Jawad_Akbar_JJStranded Far From Home (BOI22_island)C++20
0 / 100
184 ms7568 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 1<<18; int s[N], Par[N], Sz[N], Ans[N], lst, n, m; vector<pair<int,int>> Vec; vector<pair<int, pair<int, int>>> E; int root(int v){ return (Par[v] == v ? v : Par[v] = root(Par[v])); } int main(){ cin>>n>>m; for (int i=1;i<=n;i++){ cin>>s[i], Par[i] = i, Sz[i] = s[i]; s[0] = max(s[0], s[i]); } for (int i=1, a, b;i<=m;i++){ cin>>a>>b; if (s[a] < s[b]) swap(a, b); E.push_back({s[a], {a, b}}); } sort(begin(E), end(E)); for (auto [p, ab] : E){ auto [a, b] = ab; int A = root(a), B = root(b); if (A == B) continue; if (Sz[B] >= s[a]) Vec.push_back({B, a}); Par[B] = A; Sz[A] += Sz[B]; } for (int i=1;i<=n;i++) Ans[i] = s[i] == s[0]; reverse(begin(Vec), end(Vec)); for (auto [B, a] : Vec) Ans[B] |= Ans[a]; for (int i=1;i<=n;i++) cout<<Ans[i]; cout<<'\n'; } /* 4 4 1 2 4 6 1 2 1 3 2 3 3 4 */
#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...