Pagini recente » Cod sursa (job #1745009) | Cod sursa (job #1817546) | Cod sursa (job #2566864) | Cod sursa (job #429937) | Cod sursa (job #913616)
Cod sursa(job #913616)
#include<fstream>
#include<vector>
using namespace std;
int n,m,i,j,l[16400],x,y,sol;
vector<int>a[8200];
bool ok,uz[8200];
int cupleaza(int x)
{
int i;
if(uz[x]==1)
return 0;
uz[x]=1;
for(i=0;i<a[x].size();++i)
if(!l[a[x][i]])
{
l[x]=a[x][i];
l[a[x][i]]=x;
return 1;
}
for(i=0;i<a[x].size();++i)
if(cupleaza(l[a[x][i]]))
{
l[x]=a[x][i];
l[a[x][i]]=x;
return 1;
}
}
void init()
{
for(i=1;i<=n;++i)
uz[i]=0;
}
void df(int x,int t)
{
int i;
if(uz[t]==0)
uz[x]=2;
else
df(l[x]-n,x);
}
int main()
{
ifstream f("felinare.in");
ofstream g("felinare.out");
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y;
a[x].push_back(y+n);
}
ok=1;
sol=2*n;
while(ok)
{
init();
ok=0;
for(i=1;i<=n&&!ok;++i)
if(!l[i]&&cupleaza(i))
ok=1,--sol;
}
g<<sol;
/*init();
for(i=1;i<=n;++i)
{
if(!r[i]&&!uz[i])
df(i,0);
if(l[i])
--sol;
else
++uz[i];
}
g<<sol<<'\n';
for(i=1;i<=n;++i)
g<<uz[i]<<'\n';*/
}