Pagini recente » Cod sursa (job #1363341) | Cod sursa (job #1540543) | Cod sursa (job #1238845) | Cod sursa (job #1837483) | Cod sursa (job #1404598)
#include <bits/stdc++.h>
#define pb push_back
#define N 8195
using namespace std;
vector<int>v[N];
int l[N], r[N], n, m, sol, x, y, ok, i, a[N], b[N];
bitset<N>viz;
bool pairup(int nod)
{
if(viz[nod])
return 0;
viz[nod] = 1;
for(auto it : v[nod])
if(!r[it] || pairup(r[it]))
{
l[nod] = it;
r[it] = nod;
return 1;
}
return 0;
}
int main()
{
freopen("felinare.in", "r", stdin);
freopen("felinare.out", "w", stdout);
scanf("%d%d", &n, &m);
for(; m; m--)
{
scanf("%d%d", &x, &y);
v[x].pb(y);
}
for(ok = 1; ok;)
{
ok = 0;
viz = 0;
for(i = 1; i <= n; i++)
if(!l[i] && pairup(i))
{
sol++;
ok = 1;
}
}
printf("%d\n", 2 * n - sol);
for(i = 1; i <= n; i++)
a[i] = b[i] = 1;
for(i = 1; i <= n; i++)
if(l[i])
a[i] = b[l[i]] = 0;
for(i = 1; i <= n; i++)
{
if(a[i] && b[i])
printf("0\n");
else if(b[i])
printf("1\n");
else if(a[i])
printf("2\n");
else
printf("3\n");
}
return 0;
}