Cod sursa(job #2470040)

Utilizator andreighinea1Ghinea Andrei-Robert andreighinea1 Data 8 octombrie 2019 17:21:38
Problema Mesaj4 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#define Nmax 100002

using namespace std;

FILE *f=fopen("mesaj4.in","rt");
ofstream o("mesaj4.out");

int i,n,m,x,y,ies[Nmax],cap;
bool used[Nmax];

struct node{
    int x;
    node *next;
} *g[Nmax],*g2[Nmax],*gt[Nmax];

void init(int x,int y,node *graf[]){
    node *t=new node();
    t->x=y;
    t->next=graf[x];
    graf[x]=t;
}

void read(){
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=m;++i){
        fscanf(f,"%d%d",&x,&y);
        init(x,y,g);
        init(y,x,g);
    }
}

void dfs(int x){
    used[x]=true;
    int v;
    for(node *p=g[x];p;p=p->next){
        v=p->x;
        if(!used[v]){
            // Aici pun transpusul graficului format, pt afisare
            if(ies[x]>0){ // Atunci tre invers
                init(v,x,g2);
                ++ies[v];

                init(x,v,gt);
            }
            else{
                init(x,v,g2);
                ++ies[x];

                init(v,x,gt);
            }

            dfs(v);
        }
    }
    if(!ies[x])
        cap=x;
}

void afis(int x,node *graf[]){
    cout << x << " ";
    used[x]=true;
    int v;
    for(node *p=graf[x];p;p=p->next){
        v=p->x;
        if(!used[v]){
            o << x << " " << v << '\n';
            afis(v,graf);
        }
    }
}

void solve(){
    dfs(1);

    o << 2*(n-1) << '\n';

    for(int i=1;i<=n;++i)
        used[i]=false;
    afis(cap,gt);

    for(int i=1;i<=n;++i)
        used[i]=false;
    afis(1,g2);
}

int main()
{
    read();
    solve();
    return 0;
}