Submission #1306048

#TimeUsernameProblemLanguageResultExecution timeMemory
1306048vlomaczkIsland Hopping (JOI24_island)C++20
65 / 100
5 ms460 KiB
#include "island.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> typedef long long ll; using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; int M = 310; vector<int> rep(M); int ile; int Find(int v) { return (rep[v] == v ? v : rep[v] = Find(rep[v])); } void Union(int a, int b) { a = Find(a); b = Find(b); if(a==b) return; ile--; rep[a] = b; } void solve(int N, int L) { ile = N; for(int i=1; i<=N; ++i) rep[i] = i; vector<int> next(N+1, 1); set<pair<int, int>> bridges; vector<pair<int, int>> ans; vector<int> curr; for(int i=1; i<=N; ++i) curr.push_back(i); while(ile > 1 && curr.size()) { vector<int> new_cr; for(auto x : curr) { if(next[x] < N) { int odp = query(x, next[x]); next[x]++; if(bridges.find({x, odp})!=bridges.end()) continue; if(bridges.find({odp, x})!=bridges.end() && Find(x) != Find(odp)) { ans.push_back({x,odp}); Union(x, odp); new_cr.push_back(x); new_cr.push_back(odp); } bridges.insert({x,odp}); } } swap(curr, new_cr); } for(auto[a,b] : ans) answer(a,b); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...