Pagini recente » Cod sursa (job #91246) | Cod sursa (job #501966) | Cod sursa (job #202587) | Cod sursa (job #236554) | Cod sursa (job #166948)
Cod sursa(job #166948)
# include <stdio.h>
# include <string.h>
# include <vector>
using namespace std;
# define input "felinare.in"
# define output "felinare.out"
# define max 8200
# define minim(a,b) (a<b?a:b)
int n,i,j,T,r,m,x,y;
//int v[max][max];
vector <int> v[max];
int st[max],dr[max],lf[max],rt[max];
int nr;
int u[max];
int cupleaza(int nod)
{
if(u[nod]) return 0;
int i,j;
u[nod] = 1;
for(j=0;j<v[nod].size();j++)
{
i = v[nod][j];
if(!dr[i] || cupleaza(dr[i]))
{
st[nod] = i;
dr[i] = nod;
lf[nod] = 1;
return 1;
}
}
return 0;
}
void cherche(int nod)
{
int i,j;
for(j = 0;j<v[nod].size();j++)
{
i = v[nod][j];
if(!rt[i])
{
rt[i] = 1;
lf[dr[i]] = 0;
cherche(dr[i]);
}
}
}
void cuplaj()
{
int i;
for(i = 1;i<= n;i++)
{
if(st[i]) continue;
if(cupleaza(i))nr++;
else
{
memset(u,0,sizeof(u));
if(cupleaza(i)) nr++;
}
}
for(i=1;i<=n;i++)
if(!lf[i])
cherche(i);
}
int main()
{
freopen(input, "r", stdin);
freopen(output, "w", stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
// v[x][++v[x][0]] = y;
v[x].push_back(y);
}
cuplaj();
/* for(i=1;i<=n;i++)
printf("%d %d\n",st[i] , dr[i]);*/
printf("%d\n",2*n-nr);
for (i = 1; i <= n; ++i)
printf("%d\n", 1-lf[i]+2*(1-rt[i]));
return 0;
}