Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. vector<vector<int>> G;
  7.  
  8. int dfs (int v, vector<int>& used, int color, vector<int>& match) {
  9. if (used[v] == color) return 0;
  10. used[v] = color;
  11. for (auto& u: G[v]) {
  12. if (match[u] == -1 || dfs (match[u], used, color, match)) match[u] = v;
  13. }
  14. }
  15.  
  16. int main () {
  17. int q;
  18. while (q--) {
  19. int m, n;
  20. cin >> m >> n;
  21. G = vector<vector<int>> (m + n);
  22. for (int i = 0; i < m; ++i) {
  23. int x;
  24. while (1) {
  25. cin >> x;
  26. if (x == 0) break;
  27. --x;
  28. x += m;
  29. G[i].push_back (x), G[x].pb (i);
  30. }
  31. }
  32. vector<int> used (n + m), match (n + m, -1);
  33. int color = 1;
  34. for (int i = 0; i < m; ++i) {
  35. dfs (i, used, color, match);
  36. ++color;
  37. }
  38. for (auto& x: match) cout << x << ' ';
  39. }
  40.  
  41.  
  42.  
  43.  
  44.  
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement