Cod sursa(job #1980355)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 12 mai 2017 22:30:19
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
#define Nmax 10001
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
bool viz[Nmax];
bitset <Nmax> valid;
bitset <Nmax> candidat;
list <int> G[Nmax];
list < pair <int,int> > sol;
int t[Nmax];
int main()
{
    int n,m,nr,i,j,k;
    f>>n>>m>>nr;
    for(int con=1;con<=nr;con++)
    {
        f>>i>>j;
        G[i].push_back(j);
    }
    int n1=n,n2=m;
    k=0;
    while(n1 and n2)
    {
        list <int> :: iterator it;
        fill(viz+1,viz+m+1,false);
        for(i=1;i<=n;i++)
            if(!valid[i])
                for(it=G[i].begin();it!=G[i].end();it++)
                    if(!viz[*it])
                    {
                        viz[*it]=true;
                        t[*it]=i;
                    }
        for(i=1;i<=m;i++)
            if(!candidat[i] and !valid[t[i]])
            {
                candidat[i]=true;
                valid[t[i]]=true;
                k++;
                sol.push_back({t[i],i});
                n1--;
                n2--;
            }
    }
    g<<k<<'\n';
    list < pair <int,int> > :: iterator itt;
    for(itt=sol.begin();itt!=sol.end();itt++)
        g<<itt->first<<' '<<itt->second<<'\n';

    return 0;
}