Cod sursa(job #2986895)

Utilizator Luca529Taschina Luca Luca529 Data 1 martie 2023 15:35:53
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> x[100001];
bool p[10001], cuplat[100001];
int y[100001];

bool DFS(int nod)
{if(p[nod]==1)return 0;

 p[nod]=1;
 vector<int>:: iterator I;
 for(I=x[nod].begin();I<x[nod].end();I++)
 if(y[*I]==0 || DFS(y[*I]))
 {y[*I]=nod;
  cuplat[nod]=1;
  return 1;
 }

 return 0;
}

int main()
{   int n, m, k, a, b, nr=0;
    bool t=false;
    fin>>n>>m>>k;
    for(int i=1;i<=k;i++)
    {fin>>a>>b;
     x[a].push_back(b);
    }

    while(!t)
    {t=true;

     for(int i=1;i<=n;i++)
     p[i]=0;

     for(int i=1;i<=n;i++)
     if(cuplat[i]==0 && DFS(i))
     {nr++;
      t=false;
     }
    }

    fout<<nr<<"\n";
    for(int i=1;i<=m;i++)
    if(y[i]!=0)fout<<y[i]<<" "<<i<<"\n";
    return 0;
}