hdu-4857 逃生 拓扑排序

2015-07-20 17:47:51 · 作者: · 浏览: 3

?

思路--优先队列+反向拓扑+逆序输出
把受限制条件多的先弹出到数组里,然后再弹出不受限制的(用优先队列按序号从大到小),最后逆序输出。

#include
  
   
#include
   
     #include
    
      #include
     
       using namespace std; #define N 30001 int n,in[N],num[N],cnt; vector
      
       v[N]; priority_queue
       
        ,less
        
          >q; //大根堆 void init() { cnt=0; for(int i=0;i<=n;i++) v[i].clear(); memset(in,0,sizeof(in)); memset(num,0,sizeof(num)); while(!q.empty()) q.pop(); } void top_sort() { for(int i=1;i<=n;i++) if(in[i]==0) q.push(i); while(!q.empty()) { int w=q.top(); q.pop(); num[cnt++]=w; for(int i=0;i
         
          =0;i--) printf( %d,num[i]); printf( ); } return 0; } 
         
        
       
      
     
    
   
  

?