Pagini recente » Cod sursa (job #579307) | Cod sursa (job #651529) | Cod sursa (job #1168522) | Cod sursa (job #1426651) | Cod sursa (job #1345471)
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
#define NMAX 8195
ifstream fin("felinare.in");
ofstream fout("felinare.out");
vector <int> v[NMAX];
bitset <NMAX> viz;
int n,m,x,y,nr,D[2][NMAX],L[NMAX],R[NMAX],N[NMAX];
bool cupleaza(int nod)
{
int i;
if (viz[nod]) return false;
viz[nod]=1;
for (i=0;i<v[nod].size();++i)
if (!R[v[nod][i]])
{
L[nod]=v[nod][i];
R[v[nod][i]]=nod;
return true;
}
for (i=0;i<v[nod].size();++i)
if (cupleaza(R[v[nod][i]]))
{
L[nod]=v[nod][i];
R[v[nod][i]]=nod;
return true;
}
return false;
}
int main()
{
int i;
bool ok;
fin>>n>>m;
for (i=1;i<=m;++i)
{
fin>>x>>y;
++D[0][x], ++D[1][y];
v[x].push_back(y);
}
for (ok=true;ok;)
{
ok=false;
viz.reset();
for (i=1;i<=n;++i)
if (!L[i] && cupleaza(i))
ok=true;
}
for (i=1;i<=n;++i)
N[i]=3;
for (i=1;i<=n;++i)
if (L[i])
{
++nr;
if (D[0][i]>D[1][L[i]])
--N[i];
else
N[L[i]]-=2;
}
fout<<2*n-nr<<"\n";
for (i=1;i<=n;++i)
fout<<N[i]<<"\n";
return 0;
}