Pagini recente » Cod sursa (job #2396904) | Cod sursa (job #1019229) | Cod sursa (job #1074434) | Cod sursa (job #832190) | Cod sursa (job #1827348)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int nmax=8200;
vector<int> v[nmax];
int l[nmax],r[nmax],ans[nmax];
bool viz[nmax],sl[nmax],sr[nmax];
int n,m,i,j,x,y,sum;
bool change;
bool pairup(int x)
{
if(viz[x]) return 0;
viz[x]=1;
for(int ind=0;ind<v[x].size();ind++)
if(!r[v[x][ind]])
{
l[x]=v[x][ind];
r[v[x][ind]]=x;
return 1;
}
for(int ind=0;ind<v[x].size();ind++)
if(pairup(r[v[x][ind]]))
{
l[x]=v[x][ind];
r[v[x][ind]]=x;
return 1;
}
return 0;
}
void support(int x)
{
for(int ind=0;ind<v[x].size();ind++)
if(!sr[v[x][ind]])
{
sr[v[x][ind]]=1;
sl[r[v[x][ind]]]=0;
support(r[v[x][ind]]);
}
}
int main()
{
ifstream f("felinare.in");
ofstream g("felinare.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(y);
}
change=1;
while(change)
{
change=0;
for(i=1;i<=n;i++)
viz[i]=0;
for(i=1;i<=n;i++)
if(pairup(i)) change=1;
}
for(i=1;i<=n;i++)
if(l[i])
sl[i]=1;
for(i=1;i<=n;i++)
if(!l[i])
support(i);
for(i=1;i<=n;i++)
{
if(!sl[i])
{ans[i]+=1;sum++;}
if(!sr[i])
{ans[i]+=2;sum++;}
}
g<<sum<<'\n';
for(i=1;i<=n;i++)
g<<ans[i]<<'\n';
return 0;
}