Pagini recente » Cod sursa (job #1712757) | Cod sursa (job #913626)
Cod sursa(job #913626)
#include<fstream>
#include<vector>
#include<cstring>
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 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)
{
memset(uz,0,sizeof(uz));
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';*/
}