Submission #668161

#TimeUsernameProblemLanguageResultExecution timeMemory
668161fatemetmhrStranded Far From Home (BOI22_island)C++17
100 / 100
242 ms43836 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(x) x.begin(), x.end() #define pb push_back #define fi first #define se second const int maxn5 = 3e5 + 10; ll s[maxn5], sum[maxn5]; int cmp[maxn5]; bool mark[maxn5], seen[maxn5]; vector <int> adj[maxn5], av[maxn5]; vector <pair<int, int>> ver; void merge(int a, int b){ if(av[a].size() < av[b].size()) swap(a, b); for(auto u : av[b]){ cmp[u] = a; av[a].pb(u); } sum[a] += sum[b]; av[b].clear(); } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; for(int i = 0; i < n; i++){ cin >> s[i]; ver.pb({s[i], i}); } for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; a--; b--; adj[a].pb(b); adj[b].pb(a); } sort(all(ver)); memset(mark, true, sizeof mark); for(int i = 0; i < n; i++){ cmp[i] = i; av[i].pb(i); sum[i] = s[i]; } for(auto [val, v] : ver){ seen[v] = true; for(auto u : adj[v]) if(cmp[u] != cmp[v] && seen[u]){ if(sum[cmp[u]] < s[v]) for(auto z : av[cmp[u]]) mark[z] = false; merge(cmp[u], cmp[v]); } } for(int i = 0; i < n; i++) cout << mark[i]; cout << endl; }
#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...