제출 #722887

#제출 시각아이디문제언어결과실행 시간메모리
722887The_SamuraiStranded Far From Home (BOI22_island)C++17
10 / 100
1086 ms28192 KiB
#pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2") #include "bits/stdc++.h" using namespace std; using ll = long long; int INF = 2e9; int n, m, mx; vector<vector<int>> g; vector<bool> vis; vector<int> a; bool check(int i) { int sum = a[i]; if (sum >= mx) return true; priority_queue<pair<int, int>> pq; set<int> st = {i}; vector<int> way = {i}; for (int u : g[i]) { st.insert(u); pq.push({-a[u], u}); } while (!pq.empty()) { auto [need, u] = pq.top(); pq.pop(); need = -need; if (sum < need) break; way.emplace_back(u); sum += need; if (sum >= mx) return true; for (int v : g[u]) { if (!st.count(v)) { st.insert(v); pq.push({-a[v], v}); } } } for (int x: way) vis[x] = 1; return false; } void solve() { cin >> n >> m; a.assign(n + 1, 0); g.assign(n + 1, {}); vis.assign(n + 1, 0); for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; g[u].emplace_back(v); g[v].emplace_back(u); } mx = *max_element(a.begin() + 1, a.end()); for (int i = 1; i <= n; i++) { if (vis[i]) { cout << 0; continue; } cout << check(i); } } int main() { ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr); int queries = 1; #ifdef test_cases freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); cin >> queries; #else // cin >> queries; #endif for (int test_case = 1; test_case <= queries; test_case++) { solve(); // cout << '\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...