結果
問題 |
No.2290 UnUnion Find
|
ユーザー |
|
提出日時 | 2025-07-15 17:47:59 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 444 ms / 2,000 ms |
コード長 | 2,071 bytes |
コンパイル時間 | 7,506 ms |
コンパイル使用メモリ | 356,312 KB |
実行使用メモリ | 13,440 KB |
最終ジャッジ日時 | 2025-07-15 17:48:30 |
合計ジャッジ時間 | 30,333 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 46 |
ソースコード
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> // #include <atcoder/all> // using namespace atcoder; using namespace std; using ll = long long; using pll = pair<ll, ll>; using vll = vector<ll>; using vvll = vector<vll>; using vpll = vector<pll>; using vvpll = vector<vpll>; #define rep(i, l, r) for (ll i = l; i < ll(r); i++) #define rrep(i, l, r) for (ll i = ll(r-1); i >= l; i--) #pragma region // doubling template <typename T> T fpow(T base, T id, ll exp, std::function<T(T, T)> bop); template <typename T> T fpow(T base, ll exp); template <typename T> T fpow(T base, ll exp) { T ans = 1; while (exp > 0) { if (exp & 1ll) { ans = ans * base; } base = base * base; exp >>= 1; } return ans; } template <typename T> T fpow(T base, T id, ll exp, std::function<T(T, T)> bop) { T ans = id; while (exp > 0) { if (exp & 1ll) { ans = bop(ans, base); } base = bop(base, base); exp >>= 1; } return ans; } #pragma endregion #pragma region #pragma endregion #include <atcoder/all> using namespace atcoder; using mint = modint998244353; int main() { ll n, q; cin >> n >> q; atcoder::dsu uf(n); set<ll> s; rep(i, 0, n) s.insert(i); rep(i, 0, q) { ll t; cin >> t; if (t == 1) { ll u, v; cin >> u >> v; u--;v--; if (uf.same(u, v)) continue; u = uf.leader(u); v = uf.leader(v); uf.merge(u, v); ll newroot = uf.leader(u); if (newroot != u) swap(u, v); s.erase(v); } else { ll p; cin >> p; p--; if (s.size() == 1) { cout << -1 << endl; } else { ll u = *s.begin(), v = *(++s.begin()); p = uf.leader(p); if (u == p) { swap(u, v); } cout << u+1 << endl; } } } }