Cod sursa(job #2871986)

Utilizator alexmorosanuMorosanu Alexandru alexmorosanu Data 16 martie 2022 09:51:10
Problema Felinare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("felinare.in");
ofstream g("felinare.out");
bool fost[20011];
int coup[20011];
vector <int> v[20011];
bool cuplaj(int k)
{
    if(fost[k]==1)
        return 0;
    fost[k]=1;
    for(auto it=v[k].begin();it!=v[k].end();it++)
        if(coup[*it]==0)
        {
            coup[*it]=k;
            coup[k]=*it;
            return 1;
        }
    for(auto it=v[k].begin();it!=v[k].end();it++)
        if(cuplaj(coup[*it])==1)
        {
            coup[k]=*it;
            coup[*it]=k;
            return 1;
        }
}
int n,m,i,x,y,schimb,nr;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        v[x].push_back(y+n);
    }
    //x+n->out
    //x->in
    schimb=1;
    while(schimb)
    {
        schimb=0;
        memset(fost,0,sizeof(fost));
        for(i=1;i<=n;i++)
            if(coup[i]==0)
                schimb=schimb+cuplaj(i);
    }
    for(i=1;i<=n;i++)
        if(coup[i]>0)
        nr++;
    g<<n*2-nr;
    return 0;
}