Pagini recente » Cod sursa (job #712439) | Rating Sas Ioan-Marius (ionuts1704) | Cod sursa (job #1682361) | Cod sursa (job #800200) | Cod sursa (job #1659761)
#include <fstream>
#include <string.h>
#include <vector>
#define nMax 8200
#define pb push_back
using namespace std;
ifstream fin("felinare.in");
ofstream fout("felinare.out");
int n, m, cuplaj;
int l[nMax], r[nMax], suppr[nMax], suppl[nMax], viz[nMax];
vector<int> G[nMax];
void read()
{
int x, y;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
G[x].pb(y);
}
}
int pairup(int node)
{
if(viz[node])
return 0;
viz[node]=1;
for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
{
int fiu=*it;
if(!r[fiu])
{
r[fiu]=node;
l[node]=fiu;
cuplaj++;
suppl[node]=1;
return 1;
}
}
for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
{
int fiu=*it;
if(pairup(r[fiu]))
{
r[fiu]=node;
l[node]=fiu;
suppl[node]=1;
cuplaj++;
return 1;
}
}
return 0;
}
void support(int node)
{
for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
{
int fiu=*it;
if(!suppr[fiu])
{
suppr[fiu]=1;
suppl[r[fiu]]=0;
support(r[fiu]);
}
}
}
void solve()
{
for(int change=1;change;)
{
change=0;
memset(viz, 0, sizeof(viz));
for(int i=1;i<=n;i++)
if(!l[i])
change |= pairup(i);
}
for(int i=1;i<=n;i++)
if(!suppl[i])
support(i);
}
void write()
{
fout<<2*n-cuplaj<<'\n';
for(int i=1;i<=n;i++)
fout<<(1-suppl[i]+2*(1-suppr[i]))<<'\n';
}
int main()
{
read();
solve();
write();
return 0;
}