Submission #1295926

#TimeUsernameProblemLanguageResultExecution timeMemory
1295926Jawad_Akbar_JJStranded Far From Home (BOI22_island)C++20
25 / 100
253 ms32040 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 1<<18; long long s[N]; int er[N], n, m, Par[N]; vector<int> nei[N], cmp[N]; vector<pair<int,int>> ord; 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]; ord.push_back({s[i], i}); cmp[i] = {i}; Par[i] = i; } sort(begin(ord), end(ord)); for (int i=1, a, b;i<=m;i++){ cin>>a>>b; if (s[a] > s[b] or (s[a] == s[b] and a > b)) swap(a, b); nei[b].push_back(a); } for (auto [sz, i] : ord){ for (int j : nei[i]){ j = root(j); if (s[j] < sz){ for (int k : cmp[j]) er[k] = 1; cmp[j].clear(); } if (cmp[i].size() < cmp[j].size()) swap(cmp[i], cmp[j]); for (int k : cmp[j]) cmp[i].push_back(k); s[i] += s[j]; Par[j] = Par[i]; } } for (int i=1;i<=n;i++) cout<<!er[i]; cout<<endl; }
#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...