Pagini recente » Cod sursa (job #388754) | Cod sursa (job #2373969) | Cod sursa (job #2344638) | Cod sursa (job #1556428) | Cod sursa (job #2386866)
#include <cstring>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin ("album.in");
ofstream fout ("album.out");
const int Dim = 1e4+5;
using VI = vector < int >;
using VVI = vector < VI >;
VVI G;
int A[Dim][Dim],n,k,R[Dim],L[Dim],Viz[Dim];
bool Cupleaza(int x) {
if ( Viz[x])
return false;
Viz[x] = true;
for ( const auto & y : G[x])
if (!R[y] or Cupleaza(R[y])) {
L[x] = y;
R[y] = x;
return true;
}
return false;
}
int main() {
fin >> n >> k;
G = VVI( n * 2 +1);
for ( int i = 1; i <= n; ++i)
for ( int j = 1; j <= k; ++j)
fin >> A[i][j];
for ( int i = 1; i <= n; ++i)
sort(A[i]+1,A[i]+k+1);
for ( int i = 1; i <= n; ++i)
for ( int j = 1; j <= n; ++j) {
if ( i == j)
continue;
bool ok = true;
for ( int p = 1; p <= k; ++p)
if ( A[i][p] < A[j][p] ) {
ok = false;
}
if ( ok)
G[i].push_back(n+j);
}
bool ok = true;
int cnt = 0;
while ( ok) {
memset(Viz,0,sizeof(Viz));
ok = false;
for ( int i = 1; i <= n; ++i)
if ( !L[i] and Cupleaza(i))
ok = true,++cnt;
}
fout << cnt+1;
fin.close();
fout.close();
return 0;
}