Pagini recente » Cod sursa (job #6885) | Cod sursa (job #1237296) | Cod sursa (job #2631231) | Cod sursa (job #2989321) | Cod sursa (job #2669702)
#include <bits/stdc++.h>
using namespace std;
ifstream in("felinare.in");
ofstream out("felinare.out");
const int lim=8200;
vector<int> vec[2*lim];
vector<int> gr;
bool ok[2*lim];
int tip[lim];
int poz,neg;
int n,m,x,y;
void df(int nod)
{
ok[nod]=true;
gr.push_back(nod);
if(nod<=n) ++poz;
else ++neg;
for(int x:vec[nod])
if(!ok[x]) df(x);
}
int main()
{
in>>n>>m;
for(int i=1;i<=m;++i)
{
in>>x>>y;
vec[x].push_back(y+n);
vec[y+n].push_back(x);
}
int ans=0;
for(int i=1;i<=2*n;++i)
if(!ok[i])
{
gr.clear();
poz=0,neg=0;
df(i);
if(poz>neg)
{
for(int x:gr)
if(x<=n) tip[x]+=1;
}
else
{
for(int x:gr)
if(x>n) tip[x-n]+=2;
}
ans+=max(poz,neg);
}
out<<ans<<'\n';
for(int i=1;i<=n;++i)
out<<tip[i]<<'\n';
return 0;
}