Advertisement
Guest User

Untitled

a guest
May 29th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. class Leader;
  4. class Trailer
  5. {
  6. public:
  7.     Leader *ld;
  8.     Trailer *next;
  9.     Trailer(Leader *ld1,Trailer *n)
  10.     {
  11.         next=n,ld=ld1;
  12.     }
  13. };
  14. class Leader
  15. {
  16. public:
  17.     Leader *next;
  18.     Trailer *tr;
  19.     int k;
  20.     int c;
  21.     Leader *find(int i)
  22.     {
  23.         if(k==i)return this;
  24.         if(next)return next->find(i);
  25.         return 0;
  26.     }
  27.     Leader *addtrail(int x,int y)
  28.     {
  29.         Leader *p=find(x);
  30.         if(!p){
  31.             p=new Leader(x);
  32.             p->next=this;
  33.         }
  34.         //if(!next)next=p;
  35.         Leader *q=find(y);
  36.         if(!q)q=new Leader(y);
  37.         p->tr=new Trailer(q,p->tr);
  38.         q->c++;
  39.         return *this;
  40.     }
  41.     Leader(int x)
  42.     {
  43.         next=0,tr=0,k=x,c=0;
  44.     }
  45. };
  46.  
  47. int main()
  48. {
  49.     Leader *head=new Leader(0);
  50.     int x,y;
  51.     while(x)
  52.     {
  53.         cin>>x;
  54.         if(x)
  55.         {
  56.             cin>>y;
  57.             head=head->addtrail(x,y);
  58.         }
  59.     }
  60.     Leader *lnew=new Leader(0);
  61.     Leader *f=new Leader(0);
  62.     f->next=head;
  63.    
  64.     Leader *p,*q,*r=lnew;
  65.     Trailer *t;
  66.     for(r=head;r->next;r=r->next)cout <<r->k<<' ';
  67.     while(f->next)
  68.     {
  69.         p=f;
  70.         while(p->next)
  71.         {
  72.             if(p->next->c)
  73.                 p=p->next;
  74.             else {
  75.                 q=p->next;
  76.                 p->next=q->next;
  77.                 if(q->tr)for(t=q->tr;t->next;t=t->next) t->ld->c--;
  78.                 r->next=q,r=q,r->next=0;
  79.             }
  80.         }
  81.     }
  82.     for(r=lnew;r->next;r=r->next)cout <<r->k<<' ';
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement