Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int mod = 1000000000;
  6.  
  7. int r[150];
  8. int c[150];
  9.  
  10. int a[150][150];
  11.  
  12. vector<int> gr[150];
  13.  
  14. bool used[150];
  15.  
  16. int par[150];
  17.  
  18. bool dfs(int v) {
  19. used[v] = true;
  20. for (int x : gr[v])
  21. if (par[x] == -1 || (!used[par[x]] && dfs(par[x]))) {
  22. par[x] = v;
  23. return true;
  24. }
  25. return false;
  26. }
  27.  
  28. int main() {
  29. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  30. int n, m;
  31. cin >> n >> m;
  32. long long ans = 0;
  33.  
  34. for (int i = 0; i < n; i++)
  35. for (int j = 0; j < m; j++) {
  36. cin >> a[i][j];
  37. ans += max(0, a[i][j] - 1);
  38. }
  39.  
  40. for (int i = 0; i < n; i++)
  41. for (int j = 0; j < m; j++) {
  42. r[i] = max(r[i], a[i][j]);
  43. c[j] = max(c[j], a[i][j]);
  44. }
  45.  
  46. for (int i = 0; i < n; i++)
  47. ans -= max(0, r[i] - 1);
  48. for (int i = 0; i < m; i++)
  49. ans -= max(0, c[i] - 1);
  50.  
  51. cout << ans << endl;
  52.  
  53. for (int i = 0; i < n; i++)
  54. for (int j = 0; j < m; j++)
  55. if (r[i] != 0 && a[i][j] == r[i] && r[i] == c[j])
  56. gr[i].push_back(j);
  57.  
  58. vector<pair<int, int>> v;
  59. for (int i = 0; i < n; i++)
  60. v.push_back({r[i], i});
  61.  
  62. sort(v.rbegin(), v.rend());
  63.  
  64. for (auto p : v) {
  65. int x = p.second;
  66.  
  67. if (dfs(x)) {
  68. cout << x << endl;
  69. memset(used, 0, sizeof(used));
  70. ans += r[x] - 1;
  71. }
  72. }
  73.  
  74. cout << ans;
  75.  
  76. return 0;
  77. }
  78.  
  79. /*
  80. 5 5
  81. 1 4 0 5 2
  82. 2 1 2 0 1
  83. 0 2 3 4 4
  84. 0 3 0 3 1
  85. 1 2 2 1 1
  86. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement