Submission #1309016

#TimeUsernameProblemLanguageResultExecution timeMemory
1309016cowkimStranded Far From Home (BOI22_island)C++20
0 / 100
306 ms41432 KiB
#include <bits/stdc++.h> using namespace std; struct stl{ int nrEl; vector<int> possible; vector<int> members; stl(int x, int ppl){ nrEl = ppl; possible = {x}; members = {x}; } }; void merge(stl* a, stl* b,vector<stl*>& stlp){ if(a == b) return; if(a->members.size() < b->members.size()) swap(a,b); if(b->possible.size() > 0){ //cout << b->possible.size() << " " << b->possible[0] << endl; for(auto possible : b->possible){ a->possible.push_back(possible); } } for(auto member : b->members){ stlp[member] = a; a->members.push_back(member); } a->nrEl += b->nrEl; delete(b); } int main(){ int n, m; cin >> n >> m; vector<int> nrPpl(n); for(int i = 0; i < n; i++){ cin >> nrPpl[i]; } vector<stl*> stlp(n,nullptr); for(int i = 0; i< n; i++){ stlp[i] = new stl(i,nrPpl[i]); } vector<pair<int,int>> sortedNodes(n); for(int i = 0; i< n; i++){ sortedNodes[i] = {nrPpl[i],i}; } sort(sortedNodes.begin(),sortedNodes.end()); vector<vector<int>> adj(n); for(int i = 0; i< m; i++){ int a,b; cin >> a >> b; a--; b--; adj[a].push_back(b); adj[b].push_back(a); } for(auto par : sortedNodes){ int node = par.second; for(auto child : adj[node]){ if(nrPpl[child] > nrPpl[node]) continue; if(stlp[child]->nrEl < nrPpl[node]){ //cout << child << " cant break through " << node << endl; stlp[child]->possible.clear(); } merge(stlp[child],stlp[node],stlp); } } vector<bool> possible(n,false); for(auto num : stlp[0]->possible){ possible[num] = true; } for(int i = 0; i< n; i++) cout << possible[i]; cout << endl; 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...