Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define debug(tl) cerr<<#tl<<' '<<tl<<'\n';
- #define de(tl) cerr<<#tl<<' '<<tl<<" ";
- #include "bits/stdc++.h"
- using namespace std;
- #define all(mask) mask.begin(), mask.end()
- typedef long long ll;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- typedef long double ld;
- struct dsu {
- vector<int> p, siz;
- dsu(int n) {
- p.resize(n), siz.resize(n);
- for (int i = 0; i < n; i++) {
- p[i] = i;
- siz[i] = 1;
- }
- }
- int find(int v) {
- if (v == p[v]) {
- return v;
- }
- return p[v] = find(p[v]);
- }
- void union_set(int a, int b) {
- a = find(a);
- b = find(b);
- if (a == b) {
- return;
- }
- else {
- if (siz[a] < siz[b]) {
- swap(a, b);
- }
- p[b] = a;
- siz[a] += siz[b];
- }
- }
- };
- signed main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int n, m;
- cin >> n >> m;
- dsu U(n);
- int cnt = 0, ans = 0;
- bool fl = false;
- if (n == 1)fl = true;
- for (int i = 0; i < m; i++) {
- int a, b;
- cin >> a >> b;
- a--, b--;
- if (U.find(a) != U.find(b)) {
- cnt++;
- U.union_set(a, b);
- }
- if (!fl && cnt == n - 1) {
- ans = i + 1;
- fl = true;
- }
- }
- cout << ans << '\n';
- }
Add Comment
Please, Sign In to add comment