Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int mod = 1000000000;
- int r[150];
- int c[150];
- int a[150][150];
- vector<int> gr[150];
- bool used[150];
- int par[150];
- bool dfs(int v) {
- used[v] = true;
- for (int x : gr[v])
- if (par[x] == -1 || (!used[par[x]] && dfs(par[x]))) {
- par[x] = v;
- return true;
- }
- return false;
- }
- int main() {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- int n, m;
- cin >> n >> m;
- long long ans = 0;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++) {
- cin >> a[i][j];
- ans += max(0, a[i][j] - 1);
- }
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++) {
- r[i] = max(r[i], a[i][j]);
- c[j] = max(c[j], a[i][j]);
- }
- for (int i = 0; i < n; i++)
- ans -= max(0, r[i] - 1);
- for (int i = 0; i < m; i++)
- ans -= max(0, c[i] - 1);
- cout << ans << endl;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- if (r[i] != 0 && a[i][j] == r[i] && r[i] == c[j])
- gr[i].push_back(j);
- vector<pair<int, int>> v;
- for (int i = 0; i < n; i++)
- v.push_back({r[i], i});
- sort(v.rbegin(), v.rend());
- for (auto p : v) {
- int x = p.second;
- if (dfs(x)) {
- cout << x << endl;
- memset(used, 0, sizeof(used));
- ans += r[x] - 1;
- }
- }
- cout << ans;
- return 0;
- }
- /*
- 5 5
- 1 4 0 5 2
- 2 1 2 0 1
- 0 2 3 4 4
- 0 3 0 3 1
- 1 2 2 1 1
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement