Pagini recente » Cod sursa (job #1575797) | Cod sursa (job #1833744) | Cod sursa (job #2752869) | Cod sursa (job #125424) | Cod sursa (job #356912)
Cod sursa(job #356912)
#include<iostream>
using namespace std;
//definim clasa nod
class nod
{
public:
int nr;
int noduri;
int stg;
int drp;
int intrari;
nod *urmator;
nod *ultim;
nod(void):nr(0),noduri(0),stg(0),drp(0),intrari(0),urmator(NULL),ultim(NULL){};
};
//definim lista
class nd
{
public:
int nr;
nd *urm;
nd(void):nr(0),urm(NULL){};
};
nod v[50001];
nd *lista,*clista;
int main(void)
{
freopen("sortaret.in","r",stdin);
freopen("sortaret.out","w",stdout);
clista=lista;
int n,m,i,x,y;
cin>>n>>m;
//creem vectorul cu listele de noduri
for(i=1; i<=m; i++)
{
cin>>x>>y;
if(v[x].noduri==0)
{
nod *var=new nod;
var->nr=y;
var->urmator=NULL;
v[x].noduri=1;
v[x].urmator=var;
v[y].intrari++;
v[x].ultim=v[x].urmator;
}
else
{
nod *var=new nod;
var->nr=y;
var->urmator=NULL;
v[x].ultim->urmator=var;
v[x].ultim=var;
v[x].noduri++;
v[y].intrari++;
}
}
int noduri=n;
int primul=1;
while(noduri)
{
int aux=primul;
int j,noduri2=noduri;
for(j=1; j<=noduri; j++)
{
//verificam daca are gradul interior 0
if(v[aux].intrari==0){ if(aux==primul)primul++;
//punem nodul in lista
nd *r=new nd;
r->nr=aux;
clista->urm=r;
clista=r;
//"taiem" legaturile
int k;
nod *auxiliar;
auxiliar=v[aux].urmator;
k=v[aux].noduri;
while(k){ v[auxiliar->nr].intrari--; auxiliar=auxiliar->urmator;}
aux=v[aux].drp;
noduri2--;
}
}
noduri=noduri2;
}
cout<<n<<" "<<m;
return 0;
}