2#include"../../kyopro_library/template.hpp"
3#include"../../kyopro_library/others/xor128.hpp"
19 int idx=RandomInt(0,n);
31 if(!no_dup)
for(
int i=0; i<n; i++) ret[i]=RandomInt(lo,hi);
34 for(
int i=0; i<n; i++) {
35 int r=RandomInt(lo,hi);
36 while(st.count(r)) r=RandomInt(lo,hi);
48 for(
int i=0; i<n; i++) {
49 int idx=RandomInt(26);
50 ret.push_back(
char((lower?
'a':
'A')+idx));
59 for(
int i=0; i<n; i++) {
61 ret.push_back(s[idx]);
68 vector<vector<T>> ret(h,vector<T>(w));
69 REP(i,h) ret[i]=RandomArray(w,lo,hi);
74 vector<string> ret(h);
75 REP(i,h) ret[i]=RandomAlphabet(w,lower);
80 vector<
int> a=RandomArray<
int>(n-2,1,n+1);
81 vector<
int> d(n+1);
REP(i,n-2) d[a[i]]++;
for(ll i=1; i<=n; i++) d[i]++;
82 vector<pair<
int,
int>> ret;
84 for(ll i=1; i<=n; i++)
if(d[i]==1) pq.insert(i);
88 ret.push_back(make_pair(v,a[i]));
90 if(d[a[i]]==1) pq.insert(a[i]);
91 else if(d[a[i]]==0) pq.erase(a[i]);
93 for(ll i=1; i<=n; i++) {
95 for(
int j=i+1; j<=n; j++)
if(d[j]==1) {
96 ret.push_back(make_pair(i,j));
106 vector<pair<
int,
int>> ret;
107 vector<ll> roots={RandomInt(1,n+1)},leaves;
108 for(ll i=1; i<=n; i++)
if(i!=roots.back()) leaves.push_back(i);
109 while(!leaves.empty()) {
110 int root=GetRandomElement(roots);
111 int leaf=GetRandomElement(leaves);
112 ret.push_back(make_pair(root,leaf));
113 roots.push_back(leaf);
114 if(!leaves.empty()) {
115 int leaf=GetRandomElement(leaves);
116 ret.push_back(make_pair(root,leaf));
117 roots.push_back(leaf);
124 vector<pair<
int,
int>> edges;
125 for(
int i=0; i<n; i++)
for(
int j=i+1; j<n; j++) edges.push_back(make_pair(i+1,j+1));
128 vector<pair<
int,
int>> ret;
129 vector<
int> idxs=RandomArray<
int>(m,0,ed,
true);
130 for(
int idx:idxs) ret.push_back(edges[idx]);
133 vector<pair<
int,
int>> ret;
136 vector<
int> idxs=RandomArray<
int>(m,0,ed,
true),parent(n);
137 vector<vector<
int>> sets(n);
138 for(
int i=0; i<n; i++) {
140 sets[i].push_back(i);
143 ret.push_back(edges[idx]);
144 auto [a,b]=edges[idx];
146 if(parent[a]!=parent[b]) {
147 if(sets[parent[a]].size()<sets[parent[b]].size()) swap(a,b);
148 for(
int x:sets[parent[b]]) {
150 sets[parent[a]].push_back(x);
152 sets[parent[b]].clear();
156 for(
int i=0; i<n; i++)
if(parent[i]!=parent[0]) {
T RandomInt(T l, T r)
[l, r) の範囲からランダムな整数を返す
T GetRandomElement(vector< T > &a)
配列 a からランダムな要素を取得し、削除する
vector< pair< int, int > > RandomTree(int n)
T RandomInt(T n)
0 以上 n 未満のランダムな整数を返す
vector< pair< int, int > > RandomBinaryTree(int n)
string RandomAlphabet(int n, bool lower=true)
ランダムなアルファベット文字列を返す
vector< pair< int, int > > RandomUndirectedGraph(int n, int m, bool connected=true)
vector< string > RandomAlphabet2D(int h, int w, bool lower=true)
string RandomString(int n, string s)
文字列 s の要素からなるランダムな文字列を返す
vector< vector< T > > RandomArray2D(int h, int w, T lo, T hi)
vector< T > RandomArray(int n, T lo, T hi, bool no_dup=false)
長さ n の [lo, hi) の要素からなるランダムな数列を返す