Cod sursa(job #807011)

Utilizator ion824Ion Ureche ion824 Data 3 noiembrie 2012 21:05:06
Problema Strazi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
using namespace std;
const int NM = 260;
typedef struct lnod{
        int vf;
        struct lnod *next;
        }*Nod;
Nod a[NM];
int L[NM],lant,pr[NM],term[NM],dex[NM],din[NM];
bool viz[NM];
ofstream fout("strazi.out");

void add(int x,int y){
     Nod p = new lnod;
     p->vf=y;
     p->next=a[x];
     a[x]=p;
}

void dfs2(int nod){
     viz[nod]=0;
     fout<<nod<<' ';
     for(Nod p=a[nod];p;p=p->next)
       if(viz[p->vf])dfs2(p->vf);          
     }


void dfs(int nod){
     int nrviz=0;
     L[nod]=lant;
     viz[nod]=1;
     for(Nod p=a[nod];p;p=p->next)
       if(!viz[p->vf])
       {
         ++nrviz;
         if(p==a[nod])dfs(p->vf);
           else
           {
            din[p->vf]--;
            ++lant;
            pr[lant]=p->vf;
            dfs(p->vf);    
           }                                  
       } 
     if(!nrviz)term[lant]=nod;          
}

int main(){
    ifstream fin("strazi.in");
    int N,M,i,x,y;
    fin>>N>>M;
    
    for(i=1;i<=M;++i)
    {
     fin>>x>>y;
     add(x,y);
     dex[x]++; din[y]++;                     
    }
    
    for(i=1;i<=N;++i)
      if(!viz[i]){ ++lant; pr[lant]=i; dfs(i); }
      
    fout<<(lant-1)<<'\n';

    for(i=1;i<lant;++i)
    {
       fout<<(term[i])<<' '<<(pr[i+1])<<'\n';
       add(term[i],pr[i+1]);               
    }
    
    dfs2(pr[1]);
        
 return 0;   
}