제출 #1305701

#제출 시각아이디문제언어결과실행 시간메모리
1305701nasir_bashirovStranded Far From Home (BOI22_island)C++20
100 / 100
145 ms53752 KiB
// #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define vi vector<int> #define vl vector<ll> #define vii vector<pii> #define db long double #define vll vector<pll> #define F first #define S second #define endl '\n' #define pb push_back #define all(x) x.begin(), x.end() #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define int ll const int sz = 2e5 + 5; int n, m, x, y, res[sz], b[sz]; pii a[sz]; bool used[sz]; vi g[sz], tmp; struct DSU{ vi par, w; vector<vi> comp; int components; DSU(int sz){ components = sz; par.resize(sz + 5, -1); w.resize(sz + 5, -1); comp.resize(sz + 5); for(int i = 1; i <= n; i++) w[i] = b[i], comp[i] = {i}; } int Find(int u){ if(par[u] < 0) return u; else return par[u] = Find(par[u]); } bool Union(int u, int v){ u = Find(u), v = Find(v); if(u != v){ if(par[u] > par[v]){ swap(u, v); } par[u] += par[v], w[u] += w[v]; par[v] = u; for(int i : comp[v]){ comp[u].push_back(i); } comp[v].clear(); components--; return true; } else{ return false; } } }; void fmain(){ cin >> n >> m; for(int i = 1; i <= n; i++){ cin >> a[i].first; b[i] = a[i].first; res[i] = 1; a[i].second = i; } while(m--){ cin >> x >> y; g[x].push_back(y); g[y].push_back(x); } sort(a + 1, a + n + 1); DSU t(n); for(int i = 1; i <= n; i++){ for(int u : g[a[i].second]){ // cout << "_ " << i << " " << u << endl; if(b[u] > a[i].first) continue; int v = t.Find(u); if(t.w[v] < a[i].first){ for(int j : t.comp[v]){ res[j] = 0; } } t.Union(u, a[i].second); } } for(int i = 1; i <= n; i++) cout << res[i]; // cout << endl; } signed main(){ fastio; int _ = 1; // cin >> _; while(_--){ fmain(); } } /* */
#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...