Submission #850439

#TimeUsernameProblemLanguageResultExecution timeMemory
850439Ahmed57Stranded Far From Home (BOI22_island)C++17
0 / 100
38 ms15824 KiB
#include <bits/stdc++.h> using namespace std; int pr[100001],gs[100001],val[100001]; vector<int> adj[100001],ne[100001]; int find(int x){ if(x==pr[x])return x; return pr[x] = find(pr[x]); } bool mergegroup(int a,int b){ a=find(a),b=find(b); if(a==b)return 0; pr[b] = a , gs[a]+=gs[b]; return 1; } int main(){ int n,m; cin>>n>>m; int arr[n]; vector<pair<int,int>> v; for(int i = 0;i<n;i++){ cin>>arr[i];val[i] = 1; pr[i] = i;gs[i] = arr[i]; v.push_back({arr[i],i}); } sort(v.begin(),v.end()); for(int i = 0;i<m;i++){ int a,b;cin>>a>>b; a--;b--; if(arr[a]>arr[b])adj[a].push_back(b); else if(arr[b]>arr[a])adj[b].push_back(a); else adj[b].push_back(a); }for(auto i:v){ int co = i.first , x = i.second; for(auto j:adj[x]){ int lol = find(j) , xd = gs[lol]; if(mergegroup(lol,x)){ ne[x].push_back(lol); if(xd<co){ queue<int> q;q.push(lol); val[lol] = 0; while(!q.empty()){ int xx = q.front();q.pop(); for(auto j:ne[xx]){ if(val[j]){ val[j] = 0; q.push(j); } } } } } } } for(int i = 0;i<n;i++)cout<<val[i]; 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...