贡献一个数据生成器
查看原帖
贡献一个数据生成器
857626
_RainCappuccino_楼主2025/1/22 14:24
#include <bits/stdc++.h>
using namespace std;
const int lim = 1e8;
mt19937 rd(time(NULL));
int rnd(int L, int R) {
	uniform_int_distribution<int> myrand(L, R);
	return myrand(rd);
}
int f[10000];
int find (int x) {
	if (f[x] == x) return x;
	return f[x] = find(f[x]);
}
pair<int, int> e[10000];
map<pair<int, int>, int> mark;

int main() {
	srand(time(0));
	int n = 100, m = 120;
	cout << n << ' ' << m << endl;
	for (int i = 2; i <= n; i ++) {
		int fa = rnd(1, i - 1);
		cout << i << ' ' << fa <<endl;
		mark[{fa, i}] = 2;
	}
	for (int i = 1; i <= m - n + 1; i ++) {
		int u = rnd(1, n), v = rnd(1, n);
		while (v == u || mark[{min(u, v), max(u, v)}]) u = rnd(1, n), v = rnd(1, n);
		mark[{min(u, v), max(u, v)}] = 1;
		e[i] = {u, v}; 
		cout << u << ' ' << v << endl;
	}
	int q = 20;
	while (q --) {
		int op = rnd(0, 1);
		int u = rnd(1, n), v = rnd(1, n);
		if (op == 1) cout << op << ' ' << u << ' ' <<v <<endl;
		else {
			while (v == u || mark[{min(u, v), max(u, v)}] != 1) {
				u = rnd(1, n), v = rnd(1, n);
			}
			mark[{min(u, v), max(u, v)}] = 0;
			cout << op << ' ' << u << ' ' << v << endl;
		}
	}
	cout << -1 << endl;
	return 0;
}

2025/1/22 14:24
加载中...