设为首页 加入收藏

TOP

hdu-2647 Reward
2015-07-20 17:49:22 来源: 作者: 【 】 浏览:6
Tags:hdu-2647 Reward

?

//逆拓扑排序 ,首先常规思路是从入度为0的点开始向后推,但是你不知道后面会有多少个入度不一样的点,那么换一种思路,如果从后往前推,是不是就能解决问题。

这里 盗用一张图,

\

?

上图分成3个层次,那么第三层每个人的需求都是888,往上一层,就加1,把最下一层当成入度为0的点,逆推上去。因为边比较多,可以用vector来表示邻接表。

?

#include
  
   
#include
   
     #include
    
      #include
     
       #define N 10001 using namespace std; int in[N],mark[N],n,m; vector
      
       v[20001]; void init() { memset(in,0,sizeof(in)); memset(mark,0,sizeof(mark)); for(int i=0;i
       
        q; for(int i=1;i<=n;i++) if(in[i]==0) { q.push(i); //把入度为0的点放入队列 mark[i]=888; //初始值为888 } while(!q.empty()) { int t=q.front(); q.pop(); for(int i=0;i
        
         

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 2352――Stars(树状数组) 下一篇CodeForces 46DParking Lot线段树

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)