Submission #1084969

#TimeUsernameProblemLanguageResultExecution timeMemory
1084969dostsStranded Far From Home (BOI22_island)C++17
100 / 100
369 ms63936 KiB
//Dost SEFEROĞLU #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> #define ordered_set tree<pii,null_type,less<pii>,rb_tree_tag,tree_order_statistics_node_update> const int MOD = 1e9+7,inf = 2e18; const int N = 2e5+50; struct DSU { int n; vi dad,sz,sm; vector<set<int>> stuff; DSU(int nn) { n = nn; dad.resize(n+1); iota(all(dad),0ll); sz.assign(n+1,1); sm.assign(n+1,1); stuff.resize(n+1); } int find(int x) { if (x == dad[x]) return x; return find(dad[x]); } void unite(int x,int y) { int a = find(x),b = find(y); if (a == b) return; if (sz[a] < sz[b]) swap(a,b); sz[a]+=sz[b]; dad[b] = a; sm[a]+=sm[b]; for (auto it : stuff[b]) stuff[a].insert(it); stuff[b].clear(); } void deletecomp(int x) { stuff[find(x)].clear(); } }; void solve() { int n,m; cin >> n >> m; vi edges[n+1]; map<int,vi> nds; vi w(n+1); DSU dsu(n); for (int i=1;i<=n;i++) { cin >> w[i]; dsu.sm[i] = w[i]; nds[w[i]].push_back(i); } for (int i=1;i<=m;i++) { int a,b; cin >> a >> b; edges[a].push_back(b); edges[b].push_back(a); } for (int i=1;i<=n;i++) dsu.stuff[i].insert(i); for (auto& [v,nodes] : nds) { for (auto it : nodes) { for (auto itt : edges[it]) { if (dsu.sm[dsu.find(itt)] < w[it]) dsu.deletecomp(itt); } } for (auto it : nodes) { for (auto itt : edges[it]) { if (w[itt] <= w[it]) dsu.unite(it,itt); } } } for (int i=1;i<=n;i++) cout << dsu.stuff[dsu.find(i)].count(i); cout << endl; } signed main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) 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...