Cod sursa(job #3333307)

Utilizator Luca_georgescuLuca Georgescu Luca_georgescu Data 12 ianuarie 2026 20:46:26
Problema Felinare Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("felinare.in");
ofstream g("felinare.out");

const int nmax=1e4+5;

int n,m,e;
int st[nmax],dr[nmax];

bool used[nmax];
bool change;

vector <int> gr[nmax];

bool cupleaza(int nod)
{
    if ( used[nod] ) return false;

    used[nod]=true;

    for (auto x:gr[nod] )
    {
        if ( !dr[x] )
        {
            st[nod]=x;
            dr[x]=nod;

            return true;
        }
    }

    for (auto x:gr[nod] )
    {
        if ( cupleaza(dr[x]) )
        {
            st[nod]=x;
            dr[x]=nod;
            return true;
        }
    }

    return false;
}

void reset()
{
    change=false;
    for (int i=1; i<=n; i++ )
        used[i]=false;
}

int main()
{
    f >> n >> m;

    for (int i=1; i<=m; i++ )
    {
        int x,y; f >> x >> y;
        gr[x].push_back(y);
    }

    // nr de felinare aprinse= 2n-m, pt ca noi tb sa sarim
    // cate un nod din fiecare muchie m, pt a nu ilumina intreaga strada

    change=true;
    while ( change==true )
    {
        reset();

        for (int i=1; i<=n; i++ )
            if ( !st[i] && cupleaza(i) )
                change=true;
    }

    int nr=0;
    for (int i=1; i<=n; i++ )
        if ( st[i]>0 )
            nr++;

    g << 2*n-nr << '\n';
    return 0;
}