Pagini recente » Cod sursa (job #1881079) | Cod sursa (job #1355038) | Cod sursa (job #2085702) | Cod sursa (job #546746) | Cod sursa (job #320817)
Cod sursa(job #320817)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define file_in "felinare.in"
#define file_out "felinare.out"
#define Nmax 8192
#define Inf 0x3f3f3f3f
#define pb push_back
#define clear(a) memset(a,0,sizeof(a))
int cuplaj1[Nmax];
int cuplaj2[Nmax];
int n,m;
int viz[Nmax];
vector<int> v[Nmax];
inline bool cupleaza(int nod)
{
int i;
if (viz[nod]==1) return false;
viz[nod]=1;
for (i=0;i<v[nod].size();++i)
{
if (!cuplaj1[v[nod][i]])
{
cuplaj2[nod]=1;
cuplaj1[v[nod][i]]=nod;
return true;
}
}
for (i=0;i<v[nod].size();++i)
{
if (!cuplaj1[v[nod][i]] && cupleaza(cuplaj1[v[nod][i]]))
{
cuplaj2[nod]=1;
cuplaj1[v[nod][i]]=nod;
return true;
}
}
return false;
}
void citire()
{
int a,b,i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n,&m);
for (i=0;i<m;++i)
{
scanf("%d %d", &a,&b);
v[a].pb(b);
}
}
void solve()
{
int i,ok,nrsol;
ok=1;
while(ok)
{
clear(viz);
ok=0;
for (i=1;i<=n;++i)
{
if (cuplaj2[i]==0 && cupleaza(i))
{
ok=1;
nrsol++;
}
}
}
printf("%d\n", nrsol);
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}