Submission #603926

#TimeUsernameProblemLanguageResultExecution timeMemory
603926MohamedAhmed04Stranded Far From Home (BOI22_island)C++14
100 / 100
282 ms38464 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 2e5 + 10 ; int arr[MAX] ; int n , m ; vector< vector<int> >adj(MAX) ; int par[MAX] , sz[MAX] ; long long val[MAX] ; vector<int>v[MAX] ; void init() { for(int i = 1 ; i <= n ; ++i) par[i] = i , sz[i] = 1 , val[i] = arr[i] , v[i].push_back(i) ; } int root(int node) { if(par[node] == node) return node ; return (par[node] = root(par[node])) ; } void Union(int x , int y) { int a = root(x) ; int b = root(y) ; if(sz[a] < sz[b]) swap(a , b) ; while(v[b].size()) v[a].push_back(v[b].back()) , v[b].pop_back() ; par[b] = a ; sz[a] += sz[b] ; val[a] += val[b] ; } int mark[MAX] , ans[MAX] ; int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n>>m ; for(int i = 1 ; i <= n ; ++i) cin>>arr[i] ; for(int i = 0 ; i < m ; ++i) { int x , y ; cin>>x>>y ; adj[x].push_back(y) ; adj[y].push_back(x) ; } vector< pair<int , int> >vp ; for(int i = 1 ; i <= n ; ++i) vp.emplace_back(arr[i] , i) ; sort(vp.begin() , vp.end()) ; init() ; for(auto &p : vp) { int node = p.second ; for(auto &child : adj[node]) { if((!mark[child]) || root(node) == root(child)) continue ; int r = root(child) ; if(val[r] < arr[node]) v[r].clear() ; Union(node , child) ; } mark[node] = 1 ; } for(auto &node : v[root(1)]) ans[node] = 1 ; for(int i = 1 ; i <= n ; ++i) cout<<ans[i] ; cout<<"\n" ; return 0 ; }
#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...