Pagini recente » Cod sursa (job #2878320) | Cod sursa (job #2208789) | Cod sursa (job #1023191) | Cod sursa (job #1512019) | Cod sursa (job #2469992)
#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;
// este invers din cauza ca graful e transpus
++ies[x];
}
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);
ies[x]=ies[y]=0;
}
}
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);
init(x,v,gt);
}
else{
init(x,v,g2);
init(v,x,gt);
}
dfs(v);
}
}
if(!ies[x])
cap=x;
}
void solve(){
dfs(1);
for(int i=1;i<=n;++i)
used[i]=false;
afis(cap,gt);
for(int i=1;i<=n;++i)
used[i]=false;
afis(cap,g2);
}
void afis(int x,node *graf[]){
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);
}
}
}
int main()
{
read();
solve();
afis(cap,gt);
return 0;
}