gen-bipartite-graph.cpp 902 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "testlib.h"
  2. #include <vector>
  3. #include <set>
  4. using namespace std;
  5. int main(int argc, char* argv[])
  6. {
  7. registerGen(argc, argv, 1);
  8. int n = opt<int>(1);
  9. int m = opt<int>(2);
  10. size_t k = opt<int>(3);
  11. int t = rnd.next(-2, 2);
  12. set<pair<int,int> > edges;
  13. while (edges.size() < k)
  14. {
  15. int a = rnd.wnext(n, t);
  16. int b = rnd.wnext(m, t);
  17. edges.insert(make_pair(a, b));
  18. }
  19. vector<pair<int,int> > e(edges.begin(), edges.end());
  20. shuffle(e.begin(), e.end());
  21. vector<int> pa(n);
  22. for (int i = 0; i < n; i++)
  23. pa[i] = i + 1;
  24. shuffle(pa.begin(), pa.end());
  25. vector<int> pb(m);
  26. for (int i = 0; i < m; i++)
  27. pb[i] = i + 1;
  28. shuffle(pb.begin(), pb.end());
  29. println(n, m, e.size());
  30. for (auto [a, b] : e)
  31. println(pa[a], pb[b]);
  32. return 0;
  33. }