Cod sursa(job #991857)

Utilizator monica11Szekely Monica monica11 Data 31 august 2013 17:12:57
Problema Strazi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
ofstream g("strazi.out");
 
int i,j,n,m,viz[256],tata[265],fiu[256],x,y,nr,ok;
vector<int> a[256];
int cupleaza(int nod)
{
    int i;
    if(viz[nod])
        return 0;
    viz[nod]=1;
    for(i=0;i<a[nod].size();++i)
        if(!tata[a[nod][i]]||cupleaza(tata[a[nod][i]]))
        {
            fiu[nod]=a[nod][i];
            tata[a[nod][i]]=nod;
            return 1;
        }
        return 0;
}
int df(int nod)
{
   if(!fiu[nod])
   return nod;
   return df(fiu[nod]);
}
void afis(int nod)
{
    if(!nod )
    return ;
    g<<nod<<" ";
    afis(fiu[nod]);
}
int main()
{
    ifstream f("strazi.in");
 
    f>>n>>m;
    for(i=1;i<=m;++i)
    {
        f>>x>>y;
        a[x].push_back(y);
    }
    for(i=1;i<=n;++i)
    {
        memset(viz,0,sizeof(viz));
            cupleaza(i);
    }
    for(i=1;i<=n;++i)
    if(!tata[i])
    ++nr;
    g<<nr-1<<"\n";
    for(i=1;i<=n;++i)
    if(!tata[i])
    {
    x=df(i);
    ok=0;
    for(j=1;j<=n&&!ok;++j)
    if(!tata[j]&&i!=j)
    {
        ok=1;
        g<<x<<" "<<j<<"\n";
        tata[j]=x;
        fiu[x]=j;
    }
    }
    for(i=1;i<=n;++i)
    if(!tata[i])
        afis(i);
    return 0;
}