제출 #850447

#제출 시각아이디문제언어결과실행 시간메모리
850447Ahmed57Stranded Far From Home (BOI22_island)C++17
100 / 100
281 ms38196 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int pr[200001],gs[200001],val[200001]; vector<int> adj[200001],ne[200001]; 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[a]=b,gs[b]+=gs[a]; return 1; } signed 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(a>b)swap(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...