제출 #732232

#제출 시각아이디문제언어결과실행 시간메모리
73223242kangarooStranded Far From Home (BOI22_island)C++17
100 / 100
222 ms30300 KiB
// // Created by 42kangaroo on 16/04/2023. // #include "bits/stdc++.h" using namespace std; #define int long long using g_t = vector<vector<int>>; int find(int a, vector<int>& p, vector<bool>& pos) { if (a == p[a]) return a; int par = find(p[a], p, pos); if (!pos[p[a]]) pos[a] = false; return p[a] = par; } void unite(int a, int b, vector<int>& p, vector<int>& s, vector<bool>& pos) { a = find(a, p, pos); b = find(b, p, pos); if (a == b) return; p[b] = a; s[a] += s[b]; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n>> m; vector<int> s(n); for (int i = 0; i < n; ++i) { cin >> s[i]; } g_t gr(n); for (int i = 0; i < m; ++i) { int a, b; cin>> a >> b; --a;--b; gr[a].push_back(b); gr[b].push_back(a); } vector<int> ns = s; vector<int> o(n); std::iota(o.begin(), o.end(),0); std::sort(o.begin(), o.end(),[&](int l, int r){return s[l] < s[r];}); vector<int> p(n); std::iota(p.begin(), p.end(),0); vector<bool> pos(n, true); for (int i = 0; i < n; ++i) { for (auto e: gr[o[i]]) { if (s[e] > s[o[i]]) continue; if (ns[find(e, p, pos)] < s[o[i]]) pos[find(e, p, pos)] = false; unite(o[i], e, p, ns, pos); } } for (int i = 0; i < n; ++i) { find(i, p, pos); cout << pos[i]; } 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...