20pts求调
查看原帖
20pts求调
1382496
myl_coder楼主2025/7/29 21:05
#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 10;

int n, m, f[N], T, cnt, a[N], nxt[N], fa[N], t[N], qwq;

int findd (int x) {
	if (f[x] == x) return x;
	else return f[x] = findd(f[x]);
}

int main() {
	ios :: sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	//freopen (".in", "r", stdin);
	//freopen (".out", "w", stdout);
	
	cin >> T;
	while (T --) {
		memset(f, 0, sizeof(f));
		memset(a, 0, sizeof(a));
		memset(nxt, 0, sizeof(nxt));
		memset(fa, 0, sizeof(fa));
		memset(t, 0, sizeof(t));
		cnt = 0;
		cin >> n >> m;
		for (int i = 1; i <= n; i ++) f[i] = i;
		for (int i = 1; i <= m; i ++) {
			int x, y;
			cin >> x >> y;
			f[findd(x)] = findd(y);
		}
		for (int i = 1; i <= n; i ++) {
			if (!a[findd(i)]) {
				a[f[i]] = 1;
				++ cnt;
				fa[f[i]] = cnt;
				t[cnt] = f[i];
				if (!qwq) qwq = f[i];
			}
			fa[i] = fa[f[i]];
		}
		if (cnt == 1) {
			cout << "No\n";
			continue;
		} else cout << "Yes\n";
		for (int i = 1; i <= cnt; i ++) {
			nxt[i] = i + 1;
			if (nxt[i] > cnt) nxt[i] -= cnt;
		}
		for (int i = 1; i <= n; i ++) {
			if (i == qwq) continue;
			cout << i << " " << t[nxt[fa[f[i]]]] << "\n";
		}
	}
	
	return 0;
}
2025/7/29 21:05
加载中...