Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cassert>
- #include <cstdio>
- using namespace std;
- namespace Mlxa {
- #define read cin
- #define eol '\n'
- #define endln cout << eol
- #define print(a) cout << a << ' ';
- typedef long long ll;
- template <class T> inline void
- println (T t) { cout << t << eol; }
- template <class A, class... B> inline void
- println (A a, B... b) { print(a); println(b...); }
- template <class I> inline void
- printseq (I b, I e) {
- for (I i(b); i != e; ++i)
- print(*i); endln;
- }
- } using namespace Mlxa;
- const ll Size (1000 * 1000);
- namespace DSU {
- ll n, p[Size], s[Size];
- void init (ll N) {
- n = N; for (ll i(0); i < n; ++ i)
- p[i] = i, s[i] = 1;
- }
- ll find (ll v) {
- if (p[v] == v) return v;
- return p[v] = find(p[v]);
- }
- void unite (ll x, ll y) {
- x = find(x), y = find(y);
- if (s[x] == s[y]) ++ s[y];
- if (s[x] > s[y]) swap(x, y);
- p[x] = y;
- }
- }
- using namespace DSU;
- int main () {
- // stdin = freopen("in.txt", "r", stdin);
- ll n; read >> n;
- init(n); char c;
- for (ll x, y; read >> c >> x >> y; ) {
- if (c == 'f') println(find(x));
- if (c == 'u') unite(x, y);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment