#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(int argc, char** argv){ if(argc < 8){ cerr << "Usage: " << argv[0] << " SEED K R COMPS TMAX CMAX WMAX\n"; return 1; } long long SEED = stoll(argv[1]); int K = stoi(argv[2]); int R = stoi(argv[3]); int COMPS = stoi(argv[4]); int TMAX = stoi(argv[5]); int CMAX = stoi(argv[6]); int WMAX = stoi(argv[7]); COMPS = max(1, min(COMPS, K)); mt19937_64 rng(SEED); auto rnd = [&](int lo,int hi){ uniform_int_distribution d(lo,hi); return d(rng); }; vector nodes(K); iota(nodes.begin(), nodes.end(), 1); shuffle(nodes.begin(), nodes.end(), rng); auto it1 = find(nodes.begin(), nodes.end(), 1); if(it1 != nodes.begin()) swap(*it1, nodes[0]); vector sizes(COMPS, K/COMPS); for(int i=0;i> E; int idx = 0; for(int comp=0; comp V; V.reserve(sz); for(int j=0;j> used; for(int i=1;i<(int)V.size();++i){ int a = V[i]; int b = V[rnd(0,i-1)]; int aa=min(a,b), bb=max(a,b); if(!used.count({aa,bb})){ used.insert({aa,bb}); E.emplace_back(aa,bb, rnd(1, max(1,WMAX))); } } // few extra edges int extras = max(0, (int)V.size()/3); while(extras--){ if(V.size()<2) break; int a = V[rnd(0,(int)V.size()-1)]; int b = V[rnd(0,(int)V.size()-1)]; if(a==b) continue; int aa=min(a,b), bb=max(a,b); if(used.count({aa,bb})) continue; used.insert({aa,bb}); E.emplace_back(aa,bb, rnd(1, max(1,WMAX))); } } cout << R << "\n"; for(int i=1;i<=R;i++) cout << rnd(1, max(1,TMAX)) << (i==R?'\n':' '); cout << K << "\n"; for(int i=1;i<=K;i++) cout << rnd(1, max(1,CMAX)) << (i==K?'\n':' '); cout << E.size() << "\n"; for(auto &e: E){ int a,b,w; tie(a,b,w)=e; cout << a << " " << b << " " << w << "\n"; } return 0; }