Submission #573319

#TimeUsernameProblemLanguageResultExecution timeMemory
573319MohamedAliSaidaneStranded Far From Home (BOI22_island)C++14
100 / 100
198 ms20088 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; typedef tree<int,null_type,less<int>,rb_tree_tag, tree_order_statistics_node_update> indexed_set; typedef long long ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef pair<ld,ld> pld; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pii> vpi; typedef vector<pll> vpl; #define pb push_back #define popb pop_back #define pp pop_back #define pf push_front #define popf pop_front #define all(x) (x).begin(),(x).end() #define ff first #define ss second ///#define int ll int nx[4] = {0,0,1,-1}, ny[4] = {1,-1,0,0}; ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;} ll lcm(ll a , ll b) {return (a * b) / gcd(a , b);} const int nax = 2e5 + 4; int p[nax]; int ans[nax]; int n, m; ll s[nax]; ll val[nax]; vi adj[nax]; vpl edges; int findset(int x, ll v) { int head = p[x] == x? x: findset(p[x],v); if(ans[p[x]] == 0) ans[x] =0; if(s[head] < v) ans[x] = 0; return p[x] = head; } void unite(int i, int j, ll v) { int x = findset(i,v); int y = findset(j,v); if(x == y) return ; if(s[x] > s[y]) swap(x,y); p[x] = y; s[y] += s[x]; } bool comp(pll a, pll b) { ll u = max(val[a.ff],val[a.ss]); ll v = max(val[b.ff],val[b.ss]); return u < v; } void solve() { cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> s[i]; val[i] = s[i]; p[i] = i; ans[i] = 1; } for(int i = 1; i <= m; i ++) { int a, b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); edges.pb({a,b}); } sort(all(edges),comp); for(auto e: edges) { ll maxi = max(val[e.ff],val[e.ss]); unite(e.ff,e.ss,maxi); } ll tot = 0ll; for(int i = 1; i <= n; i++) tot += val[i]; for(int i = 1; i <= n; i++) { int x = findset(i,0); if(ans[i] == 0) cout << 0; else if(s[x] < tot) cout << 0; else cout << 1; } } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tt = 1; while(tt --) 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...