Submission #869449

#TimeUsernameProblemLanguageResultExecution timeMemory
869449lolismekStranded Far From Home (BOI22_island)C++14
0 / 100
476 ms52256 KiB
#include <algorithm> #include <iostream> #include <fstream> #include <vector> #include <queue> #include <map> #define pii pair <int, int> using namespace std; //ifstream fin("input.in"); //ofstream fout("output.out"); #define fin cin #define fout cout const int NMAX = 2e5; int v[NMAX + 1]; vector <int> adj[NMAX + 1]; int par[NMAX + 1]; int sum[NMAX + 1]; int Find(int x){ if(x == par[x]){ return x; } return par[x] = Find(par[x]); } void Join(int x, int y){ x = par[x]; y = par[y]; par[x] = y; sum[y] += sum[x]; } bool ins[NMAX + 1]; void Insert(int x){ ins[x] = true; for(int vec : adj[x]){ if(ins[vec]){ Join(vec, x); } } } bool ans[NMAX + 1]; vector <int> inds[NMAX + 1]; int wher[NMAX + 1]; vector <int> quer[NMAX + 1]; int main(){ int n, m; fin >> n >> m; priority_queue <pii, vector <pii>, greater <pii>> pq; vector <int> vals; for(int i = 1; i <= n; i++){ fin >> v[i]; par[i] = i; sum[i] = v[i]; vals.push_back(v[i]); ans[i] = 1; } for(int i = 1; i <= m; i++){ int a, b; fin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } sort(vals.begin(), vals.end()); vals.erase(unique(vals.begin(), vals.end()), vals.end()); map <int, int> norm; for(int i = 0; i < (int)vals.size(); i++){ norm[vals[i]] = i; } for(int i = 1; i <= n; i++){ inds[norm[v[i]]].push_back(i); quer[norm[v[i]]].push_back(i); wher[i] = norm[v[i]]; } for(int val = 0; val < (int)vals.size(); val++){ for(int ind : inds[val]){ Insert(ind); } for(int x : quer[val]){ int s = sum[Find(x)]; int st = 0, dr = (int)vals.size() - 1, a = 0; while(st <= dr){ int mid = (st + dr) / 2; if(vals[mid] <= s){ a = mid; st = mid + 1; }else{ dr = mid - 1; } } if(a > val){ wher[x] = a; quer[a].push_back(x); } } } for(int i = 1; i <= n; i++){ if(wher[i] == (int)vals.size() - 1){ fout << 1; }else{ fout << 0; } } 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...