Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #define all(x) x.begin(), x.end()
- #define SIZE 101
- typedef long long ll;
- using namespace std;
- int n, m;
- vector<int> link;
- vector<int> sz;
- vector<pair<int, int>> maxmin;
- int get(int v)
- {
- return link[v] == v ? v :
- link[v] = get(link[v]);
- }
- void unite(int a, int b)
- {
- a = get(a);
- b = get(b);
- if(a==b) return;
- if(sz[a] < sz[b]) swap(a, b);
- link[b] = a;
- sz[a] += sz[b];
- maxmin[a] = pair<int, int> {max(maxmin[a].first, maxmin[b].first ), min(maxmin[a].second, maxmin[b].second ) };
- }
- int main()
- {
- cin >> n >> m;
- for(int i = 0; i<n; i++ )
- {
- link.pb(i);
- sz.pb(1);
- maxmin.pb(pair<int, int>{i, i});
- }
- string s;
- int u, v;
- for(int i = 0; i < m; i++)
- {
- cin >> s;
- if(s=="union")
- {
- cin >> u >> v;
- --v, --u;
- unite(u, v);
- }else
- {
- cin >> u;
- --u;
- int ans = get(u);
- cout << maxmin[ans].second + 1 << " " << maxmin[ans].first + 1 << " " << sz[ans] << '\n';
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment