171732025-05-28 11:10:52szilGame on a Matrixcpp17Accepted 100/1003.894s8400 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 1001;
const int INF = 1e9+100;

int a[MAXN][MAXN], n;

bool f(int x) {
    vector<vector<int>> g(n+1);
    vector<int> mt(n+1, -1);
    vector<bool> vis(n+1);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (a[i][j] >= x) {
                g[i].emplace_back(j);
            }
        }
    }

    for (int i = 1; i <= n; i++) {
        random_shuffle(g[i].begin(), g[i].end());
    }

    auto try_kuhn = [&](auto &&self, int u) -> bool {
        if (vis[u]) return false;
        vis[u] = 1;
        for (int v : g[u]) {
            if (mt[v] == -1) {
                mt[v] = u;
                return true;
            }
        }
        for (int v : g[u]) {
            if (self(self, mt[v])) {
                mt[v] = u;
                return true;
            }
        }
        return false;
    };
    for (int i = 1; i <= n; i++) {
        fill(vis.begin(), vis.end(), 0);
        try_kuhn(try_kuhn, i);
    }
    return count(mt.begin(), mt.end(), -1) == 1;
}

void solve() {
    srand(42);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }
    int lo = 0, hi = INF;
    while (lo < hi) {
        int mid = (lo + hi + 1) / 2;
        if (f(mid)) lo = mid;
        else hi = mid-1;
    }
    cout << lo << "\n";
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1; 
    // cin >> t;
    while (t--) solve();
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
subtask210/10
2Accepted1ms452 KiB
3Accepted1ms348 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms316 KiB
7Accepted1ms316 KiB
8Accepted1ms432 KiB
9Accepted1ms316 KiB
10Accepted1ms500 KiB
11Accepted1ms316 KiB
12Accepted1ms388 KiB
13Accepted1ms508 KiB
14Accepted1ms472 KiB
15Accepted1ms316 KiB
16Accepted1ms320 KiB
17Accepted1ms500 KiB
18Accepted1ms316 KiB
19Accepted1ms316 KiB
20Accepted1ms316 KiB
21Accepted1ms664 KiB
22Accepted1ms316 KiB
23Accepted1ms320 KiB
24Accepted1ms328 KiB
subtask330/30
25Accepted1ms316 KiB
26Accepted2ms564 KiB
27Accepted3ms820 KiB
28Accepted8ms1252 KiB
29Accepted18ms1876 KiB
30Accepted18ms1856 KiB
31Accepted17ms1772 KiB
32Accepted8ms1228 KiB
33Accepted17ms1588 KiB
34Accepted4ms1012 KiB
subtask445/45
35Accepted6ms820 KiB
36Accepted6ms820 KiB
37Accepted4ms828 KiB
38Accepted6ms820 KiB
39Accepted4ms820 KiB
40Accepted6ms820 KiB
41Accepted6ms864 KiB
42Accepted4ms820 KiB
43Accepted4ms620 KiB
44Accepted6ms860 KiB
45Accepted6ms1004 KiB
46Accepted6ms820 KiB
47Accepted6ms824 KiB
48Accepted6ms820 KiB
49Accepted4ms820 KiB
50Accepted17ms820 KiB
51Accepted10ms864 KiB
52Accepted9ms820 KiB
53Accepted8ms928 KiB
54Accepted8ms748 KiB
55Accepted9ms820 KiB
56Accepted10ms876 KiB
57Accepted1ms316 KiB
58Accepted2ms564 KiB
subtask515/15
59Accepted293ms6360 KiB
60Accepted277ms6336 KiB
61Accepted298ms6196 KiB
62Accepted293ms6276 KiB
63Accepted296ms6192 KiB
64Accepted298ms6196 KiB
65Accepted296ms6360 KiB
66Accepted294ms6260 KiB
67Accepted293ms6196 KiB
68Accepted296ms6368 KiB
69Accepted296ms6196 KiB
70Accepted296ms6392 KiB
71Accepted263ms5396 KiB
72Accepted261ms6336 KiB
73Accepted291ms6196 KiB
74Accepted2.168s8400 KiB
75Accepted887ms7388 KiB
76Accepted2.188s8396 KiB
77Accepted3.894s7376 KiB
78Accepted2.783s7392 KiB
79Accepted551ms6136 KiB