제출 #651058

#제출 시각아이디문제언어결과실행 시간메모리
651058600MihneaStranded Far From Home (BOI22_island)C++17
100 / 100
260 ms31296 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; vector<ll> s(n); vector<int> t(n, -1); vector<int> ord(n); vector<vector<int>> bosses(n); vector<vector<int>> g(n); for (int i = 0; i < n; i++) { cin >> s[i]; ord[i] = i; bosses[i] = { i }; } sort(ord.begin(), ord.end(), [&](int i, int j) {return s[i] < s[j]; }); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; a--, b--; g[a].push_back(b); g[b].push_back(a); } function<int(int)>root = [&](int a) { if (t[a] == a) { return a; } else { return t[a] = root(t[a]); } }; function<void(int, int)>join = [&](int a, int b) { a = root(a); b = root(b); if ((int)bosses[a].size() > (int)bosses[b].size()) { swap(a, b); } t[a] = b; s[b] += s[a]; for (auto& boss : bosses[a]) { bosses[b].push_back(boss); } }; for (auto& v : ord) { /// activate vertex v vector<int> comps; for (auto& ngh : g[v]) { if (t[ngh] != -1) { comps.push_back(root(ngh)); } } sort(comps.begin(), comps.end()); comps.resize(unique(comps.begin(), comps.end()) - comps.begin()); t[v] = v; for (auto& c : comps) { if (s[c] < s[v]) { bosses[c].clear(); } } for (auto& c : comps) { join(v, c); } } vector<int> isboss(n, 0); for (auto& boss : bosses[root(0)]) { isboss[boss] = 1; } for (auto& is : isboss) { cout << is; } 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...