设为首页 加入收藏

TOP

hdu-2647 Reward
2015-07-20 17:49:22 来源: 作者: 【 】 浏览:7
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线段树

评论

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

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)