Cod sursa(job #929055)

Utilizator misinozzz zzz misino Data 26 martie 2013 20:19:53
Problema Cuplaj maxim in graf bipartit Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int ok,j,i,x,y,n,m,e,nr,viz[10100],st[10010],dr[10010],rez[10010];
vector<int>a[10010];
vector<int>b[10010];
int cupleaza(int x)
{
    int i;
    if(viz[x])
    return 0;
    viz[x]=1;
    for(i=0;i<a[x].size();++i)
    if(!dr[a[x][i]]||cupleaza(dr[a[x][i]]))
    {
        st[x]=a[x][i];
        dr[a[x][i]]=x;
        return 1;
    }
    return 0;
}
int main()
{
    f>>n>>m>>e;
    for(i=1;i<=e;++i)
    {
        f>>x>>y;
        a[x].push_back(y);
//        b[y].push_back(x);
    }
    ok=1;
    viz[1]=1;
    while (ok)
    {
    ok=0;
    for(i=1;i<=n;++i)
        if(!st[i])
            if(cupleaza(i))
            ok=1;
        for( int i=1; i<=n; ++i )
            viz[i]=0;
    }
    for( int i=1; i<=n; ++i )
           if( st[i] )
              {
                  nr++;
                  rez[nr]=i;
                  nr++;
                  rez[nr]=st[i];          }

    g<<nr/2<<'\n';
    for(i=1;i<=nr;i=i+2)
    g<<rez[i]<<' '<<rez[i+1]<<'\n';
    return 0;

           }