Submission #722982

#TimeUsernameProblemLanguageResultExecution timeMemory
722982drdilyorStranded Far From Home (BOI22_island)C++17
10 / 100
1092 ms15516 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; int main() { int n, m; cin >> n >> m; vector s(n, 0); for (int& i : s) cin >> i; vector<int> ix(n); for (int i{}; i < n ;i++) ix[i] = i; stable_sort(ix.begin(), ix.end(), [&](int a, int b) { return s[a] > s[b]; }); vector<int> jx(n); for (int i = 0; i < n; i ++) jx[ix[i]] = i; stable_sort(s.begin(), s.end(), greater{}); vector<vector<int>> adj(n); for (int i = 0; i < m ;i++) { int u, v; cin >> u >> v; u--;v--; adj[jx[u]].push_back(jx[v]); adj[jx[v]].push_back(jx[u]); } //for (int i : ix) cout << i << ' ';cout << endl; //for (int i : jx) cout << i << ' ';cout << endl; //for (int i : s) cout << i << ' ';cout << endl; string res(n, '?'); vector<int> back(n, -1); for (int i =n -1; i >= 0;i --) { set<pair<int,int>> st; vector vis(n, 0); st.emplace(0, i); vis[i] = 1; ll sum = s[i]; while (st.size()) { auto [w, j] = *st.begin(); if (sum < w) break; if (j < i) { back[i] = j; break; } st.erase(st.begin()); sum += w; for (int e : adj[j]) { if (!vis[e]) { vis[e] = 1; st.emplace(s[e], e); } } } if (back[i] == -1) res[i] = char('0' + st.empty()); } string ans(n, '?'); assert(res[0] == '1'); for (int i = 1; i < n;i++) { if (back[i] != -1) res[i] = res[back[i]]; } for (int i = 0; i < n; i++) { ans[ix[i]] = res[i]; } cout << ans << '\n'; }
#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...