Cod sursa(job #2128180)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 11 februarie 2018 15:22:07
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("senat.in");
ofstream fout("senat.out");
int N,M,viz[105],sol[105],ct,viz2[105],nr,ok;
char s[1000];
bool V[105];
vector <int>v1[105];
bool Conect(int x)
    {int i;
     if(V[x])return 0;
     else V[x]=1;
     for(i=0;i<v1[x].size();i++)
        if(viz[v1[x][i]]==0){viz[v1[x][i]]=x;viz2[x]=v1[x][i];return 1;}
     for(i=0;i<v1[x].size();i++)
     if(Conect(viz[v1[x][i]])==1){viz[v1[x][i]]=x;viz2[x]=v1[x][i];return 1;}
     return 0;
    }
int main()
{int i,x,j;
 fin>>N>>M;
 fin.getline(s,999);
 for(i=1;i<=M;i++)
    {fin.getline(s,999);
     for(j=0;s[j]!=0;j++)
        if(s[j]!=' ')nr=nr*10+s[j]-'0';
         else {v1[i].push_back(nr);nr=0;}
     v1[i].push_back(nr);nr=0;
     /*for(j=0;j<v1[i].size();j++)
        fout<<v1[i][j]<<" ";
     fout<<"\n";
*/
    }
    while(ok==0){ok=1;
     for(i=1;i<=M;i++)
        V[i]=0;
 for(i=1;i<=M;i++)
    {if(viz2[i]==0&&Conect(i)==1){ct++;ok=1;}
    }
    }
    if(ct<M)fout<<"0";
    else
        for(i=1;i<=M;i++)
            fout<<viz2[i]<<"\n";


}