Pagini recente » Istoria paginii runda/minune10/clasament | Cod sursa (job #1609922) | Cod sursa (job #1045830) | Istoria paginii runda/drjn | Cod sursa (job #320819)
Cod sursa(job #320819)
#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]]!=nod && 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=0;
//ok=1;
for (i=1;i<=n;++i)
{
clear(viz);
nrsol+=cupleaza(i);
}
printf("%d\n", 2*n-nrsol);
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}