Submission #869479

#TimeUsernameProblemLanguageResultExecution timeMemory
869479lolismekStranded Far From Home (BOI22_island)C++14
100 / 100
266 ms37308 KiB
#include <algorithm> #include <iostream> #include <fstream> #include <vector> #include <queue> #include <map> #define int long long #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]; bool bad[NMAX + 1]; int Find(int x){ if(x == par[x]){ return x; } int y = Find(par[x]); // ? bad[x] |= bad[par[x]]; par[x] = y; return par[x]; } void Join(int x, int y){ x = Find(x); y = Find(y); if(x == y){ return; } if(v[x] < v[y]){ swap(x, y); } if(v[x] > sum[y]){ bad[y] = 1; } par[y] = x; sum[x] += sum[y]; } bool ins[NMAX + 1]; void Insert(int x){ ins[x] = true; for(int vec : adj[x]){ if(ins[vec]){ Join(vec, x); } } } vector <int> inds[NMAX + 1]; pii e[NMAX + 1]; signed main(){ int n, m; cin >> n >> m; vector <int> vals; for(int i = 1; i <= n; i++){ cin >> v[i]; par[i] = i; sum[i] = v[i]; vals.push_back(v[i]); } vector <pii> aux; for(int i = 1; i <= m; i++){ int a, b; fin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); e[i] = {a, b}; aux.push_back({max(v[a], v[b]), i}); } sort(aux.begin(), aux.end()); for(pii x : aux){ Join(e[x.second].first, e[x.second].second); } for(int i = 1; i <= n; i++){ Find(i); cout << !bad[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...