제출 #995372

#제출 시각아이디문제언어결과실행 시간메모리
995372asdfgraceStranded Far From Home (BOI22_island)C++17
10 / 100
1098 ms18424 KiB
#include <bits/stdc++.h> using namespace std; #define dbg(x) x #define prt(x) dbg(cerr << x) #define pv(x) prt(#x << " = " << x << '\n') #define parr(x) dbg(prt(#x << " = "); for (auto y : x) prt(y << ' '); prt('\n')); #define parr2d(x) dbg(prt(#x << " = \n"); for (auto y : x) parr(y); prt('\n')); /* which ties are possible? a can convince b if sum(a) > sum(b) note that nodes are weighted note that the tie with the strictly least number can't be 1 in the end one with strictly most can be 1 in the end how to greedily make 1 the largest? dfs from the node and keep adding the smallest adj greedily and make sure that the size of this color's comp is greater than any other color's comp subtask 1: brute force subtask 3: just some weird stuff with set ig */ int main() { int n, m; cin >> n >> m; vector<long long> s(n); for (int i = 0; i < n; i++) { cin >> s[i]; } vector<vector<int>> edges(n); for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; x--; y--; edges[x].push_back(y); edges[y].push_back(x); } for (int i = 0; i < n; i++) { vector<bool> vis(n, false); vis[i] = true; priority_queue<array<long long, 2>> que; que.push({-s[i], i}); bool ok = true; long long tot = s[i]; while (que.size()) { long long sz = -que.top()[0], node = que.top()[1]; que.pop(); if (sz > tot) { ok = false; break; } if (node != i) { tot += sz; } for (auto next : edges[node]) { if (!vis[next]) { vis[next] = true; que.push({-s[next], next}); } } } cout << (ok ? 1 : 0); } 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...