제출 #979241

#제출 시각아이디문제언어결과실행 시간메모리
979241ArthuroWichStranded Far From Home (BOI22_island)C++17
10 / 100
1099 ms28648 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int void solve() { int n, m, po = 0; cin >> n >> m; vector<int> s(n+1), ans(n+1, 0), vis(n+1, 0); vector<pair<int, int>> ch; vector<vector<int>> adj(n+1); for (int i = 1; i <= n; i++) { cin >> s[i]; po += s[i]; ch.push_back({s[i], i}); } for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } sort(ch.begin(), ch.end()); for (int i = 1; i <= n; i++) { int inh = ch.back().first, ind = ch.back().second; ch.pop_back(); if (ans[ind] == -1) { continue; } priority_queue<pair<int, int>> pq; vector<int> proc; pq.push({0, ind}); while(!pq.empty()) { auto [w, a] = pq.top(); pq.pop(); if (vis[a] == i) { continue; } w = abs(w); if (inh < w) { break; } inh += w; if (ans[a]) { ans[ind] = 1; break; } proc.push_back(a); vis[a] = i; for (int b : adj[a]) { if (vis[b] == i) { continue; } pq.push({-s[b], b}); } } if (po == inh || ans[ind] == 1) { ans[ind] = 1; } else { ans[ind] = -1; for (int j : proc) { ans[j] = -1; } } } for (int i = 1; i <= n; i++) { cout << max(ans[i], 0LL); } cout << endl; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); int t; t = 1; while(t--) { solve(); } }
#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...