Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Leader;
- class Trailer
- {
- public:
- Leader *ld;
- Trailer *next;
- Trailer(Leader *ld1,Trailer *n)
- {
- next=n,ld=ld1;
- }
- };
- class Leader
- {
- public:
- Leader *next;
- Trailer *tr;
- int k;
- int c;
- Leader *find(int i)
- {
- if(k==i)return this;
- if(next)return next->find(i);
- return 0;
- }
- Leader *addtrail(int x,int y)
- {
- Leader *p=find(x);
- if(!p){
- p=new Leader(x);
- p->next=this;
- }
- //if(!next)next=p;
- Leader *q=find(y);
- if(!q)q=new Leader(y);
- p->tr=new Trailer(q,p->tr);
- q->c++;
- return *this;
- }
- Leader(int x)
- {
- next=0,tr=0,k=x,c=0;
- }
- };
- int main()
- {
- Leader *head=new Leader(0);
- int x,y;
- while(x)
- {
- cin>>x;
- if(x)
- {
- cin>>y;
- head=head->addtrail(x,y);
- }
- }
- Leader *lnew=new Leader(0);
- Leader *f=new Leader(0);
- f->next=head;
- Leader *p,*q,*r=lnew;
- Trailer *t;
- for(r=head;r->next;r=r->next)cout <<r->k<<' ';
- while(f->next)
- {
- p=f;
- while(p->next)
- {
- if(p->next->c)
- p=p->next;
- else {
- q=p->next;
- p->next=q->next;
- if(q->tr)for(t=q->tr;t->next;t=t->next) t->ld->c--;
- r->next=q,r=q,r->next=0;
- }
- }
- }
- for(r=lnew;r->next;r=r->next)cout <<r->k<<' ';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement