Cod sursa(job #3359512)

Utilizator rares89_Dumitriu Rares rares89_ Data 29 iunie 2026 13:13:11
Problema Cc Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cc.in");
ofstream fout("cc.out");

int n;
int a[105][105];
int u[105], v[105], p[105], way[105];

int main() {
    fin >> n;

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j)
            fin >> a[i][j];
    }

    for (int i = 1; i <= n; ++i) {
        p[0] = i;
        int j0 = 0;

        vector<int> minv(n + 1, 2e9);
        vector<int> used(n + 1, 0);

        do {
            used[j0] = 1;
            int i0 = p[j0];
            int delta = 2e9;
            int j1 = 0;

            for (int j = 1; j <= n; ++j) {
                if (!used[j]) {
                    int cur = a[i0][j] - u[i0] - v[j];

                    if (cur < minv[j]) {
                        minv[j] = cur;
                        way[j] = j0;
                    }

                    if (minv[j] < delta) {
                        delta = minv[j];
                        j1 = j;
                    }
                }
            }

            for (int j = 0; j <= n; ++j) {
                if (used[j]) {
                    u[p[j]] += delta;
                    v[j] -= delta;
                } else {
                    minv[j] -= delta;
                }
            }

            j0 = j1;
        } while (p[j0]);

        do {
            int j1 = way[j0];
            p[j0] = p[j1];
            j0 = j1;
        } while (j0);
    }

    fout << -v[0] << "\n";

    return 0;
}