Pagini recente » Cod sursa (job #967811) | Cod sursa (job #973581) | Cod sursa (job #1169279) | Cod sursa (job #323198) | Cod sursa (job #986202)
Cod sursa(job #986202)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define NM 1010
#define KM 55
using namespace std;
ifstream f("album.in");
ofstream g("album.out");
int N, K;
int i, j, k;
int A[NM][KM];
int Val[NM];
bool Viz[NM];
vector<int> G[NM];
int L[NM], R[NM];
int ANS;
bool PairUp (int node)
{
if (Viz[node]) return 0;
Viz[node]=1;
for (vector<int>::iterator it=G[node].begin(); it!=G[node].end(); ++it)
if (R[*it]==0)
{
R[*it]=node;
L[node]=*it;
return 1;
}
for (vector<int>::iterator it=G[node].begin(); it!=G[node].end(); ++it)
if (PairUp(R[*it]))
{
R[*it]=node;
L[node]=*it;
return 1;
}
return 0;
}
int main ()
{
f >> N >> K;
for (i=1; i<=N; i++)
{
for (j=1; j<=K; j++)
f >> A[i][j];
sort(A[i]+1, A[i]+K+1);
}
for (i=1; i<=N; i++)
for (j=1; j<=N; j++)
{
bool ok=1;
for (k=K; k>=1 && ok==1; k--)
if (A[i][k]<=A[j][k])
ok=0;
if (ok) G[i].push_back(j);
}
bool ok=1;
while (ok)
{
ok=0;
memset(Viz, 0, sizeof(Viz));
for (i=1; i<=N; i++)
if (L[i]==0)
ok|=PairUp(i);
}
for (i=1; i<=N; i++)
ANS+=(R[i]!=0);
g << N-ANS << '\n';
f.close();
g.close();
return 0;
}