Cod sursa(job #2669702)

Utilizator loraclorac lorac lorac Data 7 noiembrie 2020 17:20:30
Problema Felinare Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#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;
}