Pagini recente » Cod sursa (job #1944688) | Cod sursa (job #166114) | Cod sursa (job #726124) | Cod sursa (job #695717) | Cod sursa (job #2274377)
#include <bits/stdc++.h>
using namespace std;
ifstream f("felinare.in");
ofstream g("felinare.out");
vector<int> v[9010],u[9010];
int n,m,i,x,y,ans,D[9010],S[9010];
bitset<9010> viz;
bool acts[9010],actv[9010],vizz[9010][10],act[9010][10];
void dfs(int poz,int whic,int star)
{
if(vizz[poz][whic])return ;
vizz[poz][whic]=1;
if(whic==star)
act[poz][whic]=1;
if(whic==0)
for(auto it:v[poz])
dfs(it,1,star);
else
for(auto it:u[poz])
dfs(it,0,star);
return;
}
bool grow(int i)
{
if(viz[i])return 0;
viz[i]=1;
for(auto it:v[i])
if(!S[it])
{
D[i]=it;
S[it]=i;
return 1;
}
for(auto it:v[i])
if(!viz[S[it]]&&grow(S[it]))
{
D[i]=it;
S[it]=i;
return 1;
}
return 0;
}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(y);
u[y].push_back(x);
}
for(bool ok=1;ok;)
{
ok=0;viz.reset();
for(i=1;i<=n;i++)
if(!D[i]&&grow(i))
{
ok=1;
ans++;
}
}
//for(i=1;i<=n;i++)
// cout<<D[i]<<' '<<S[i]<<'\n';
for(i=1;i<=n;i++)
if(!D[i])
for(auto it:v[i])
if(S[it])
dfs(it,1,1);
for(i=1;i<=n;i++)
if(!S[i])
for(auto it:u[i])
if(D[it])
dfs(it,0,0);
for(i=1;i<=n;i++)
if(D[i]&&(!vizz[i][0]))
act[i][0]=1;
g<<2*n-ans<<'\n';
for(i=1;i<=n;i++)
g<<(1-act[i][0])+2*(1-act[i][1])<<'\n';
return 0;
}