令每一个员工都有一个自己的等级level[i] , 员工等级越高,那么工资越高,为了使发的钱尽可能少,所以每一级只增加一单位的钱

输入a b表示a等级高于b,那么我们反向添加边,令b—>a那么in[a]++,再进行拓扑排序,每次都让边的终点的level值大于起始点,那么要用max取较大值

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. const int N = ;
  9. int n , m , level[N] ;
  10. int first[N] , in[N] , k;
  11.  
  12. struct Path{
  13. int y , next;
  14. }path[N<<];
  15.  
  16. void add_edge(int x, int y)
  17. {
  18. in[y]++;
  19. path[k].y=y , path[k].next = first[x];
  20. first[x] = k++;
  21. }
  22.  
  23. bool DAG()
  24. {
  25. memset(level,,sizeof(level));
  26. int cnt = ;//统计能形成无环图的最多的点的个数
  27. queue<int> q;
  28. for(int i = ; i<= n ; i++)
  29. if(in[i] == ){
  30. q.push(i);
  31. level[i] = ;
  32. }
  33. while(true){
  34. if(q.empty()) break;
  35. int u = q.front();
  36. q.pop();
  37. cnt++;
  38. for(int i = first[u] ; i!=- ; i=path[i].next){
  39. int v= path[i].y;
  40. in[v]--;
  41. level[v] = max(level[v] , level[u]+);
  42. if(in[v] == )
  43. q.push(v);
  44. }
  45. }
  46. if(cnt<n) return false;
  47. return true;
  48. }
  49.  
  50. int main()
  51. {
  52. // freopen("a.in","rb",stdin);
  53. int a,b;
  54. memset(level , 0x3f , sizeof(level));
  55. while(~scanf("%d%d",&n,&m)){
  56. memset(first , - , sizeof(first));
  57. memset(in , , sizeof(in));
  58. k=;
  59.  
  60. for(int i= ; i<m ; i++){
  61. scanf("%d%d",&a,&b);
  62. add_edge(b , a);
  63. }
  64.  
  65. if(DAG()){
  66. int ans = ;
  67. for(int i = ; i<=n ; i++)
  68. ans+=+level[i];
  69. printf("%d\n",ans);
  70. }
  71. else puts("-1");
  72. }
  73. return ;
  74. }

HDU 2647 逆向拓扑排序的更多相关文章

  1. HDU.2647 Reward(拓扑排序 TopSort)

    HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...

  2. ACM: hdu 2647 Reward -拓扑排序

    hdu 2647 Reward Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  3. HDU 2647 Reward (拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... ...

  4. hdu 2647 Reward(拓扑排序+反图)

    题目链接:https://vjudge.net/contest/218427#problem/C 题目大意: 老板要给很多员工发奖金, 但是部分员工有个虚伪心态, 认为自己的奖金必须比某些人高才心理平 ...

  5. hdu 4857 逆向拓扑排序+反向输出

    /*一组测试实例 4 4 2 3 1 2 4 */ #include<stdio.h> #include<string.h> #include<queue> usi ...

  6. hdu 2647 Reward(拓扑排序+优先队列)

    Problem Description Dandelion's uncle is a boss of a factory. As the spring festival is coming , he ...

  7. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  8. hdu 4857 逃生 拓扑排序+PQ,剥层分析

    pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...

  9. HDU-4857 逃生(逆向拓扑排序)

    Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前. ...

随机推荐

  1. 在spring data jpa中使用自定义转换器之使用枚举转换

    转载请注明http://www.cnblogs.com/majianming/p/8553217.html 在项目中,经常会出现这样的情况,一个实体的字段名是枚举类型的 我们在把它存放到数据库中是需要 ...

  2. 大步小步法(BSGS) 学习笔记

    \(\\\) BSGS 用于求解关于 \(x\) 的方程: \[ a^x\equiv b\pmod p\ ,\ (p,a)=1 \] 一般求解的是模意义下的指数,也就是最小非负整数解. \(\\\) ...

  3. iOS-UI控件之UITableView(二)- 自定义不等高的cell

    不等高的cell 给模型增加frame数据 所有子控件的frame cell的高度 @interface XMGStatus : NSObject /**** 文字\图片数据 ****/ // ... ...

  4. 关于mapState和mapMutations和mapGetters 和mapActions辅助函数的用法及作用(一)-----mapState

    一.通过mapState函数的对象参数来赋值: <p>{{ count }}</p> <p>{{ count1 }}</p> <p>{{ c ...

  5. swift potocol 作为参量时函数的派发顺序

    1.检查protocol本体是否声明调用函数: 2.如果没有,检查protocol扩展是否有该函数:如果扩展中也没有,报错: 3.如果本体声明了函数,使用动态派发机制进行派发:扩展中的实现位于最末位.

  6. 认知升级x

    写作目的 今天公司组织了一场关于认知升级的培训讲座,请的主管运营和发行的VP大神,收获颇多,亟待消化.这篇文章可以作为自己课后的一个笔记,自己可以反思,进而同步至团队,大家共同成长. 对于机会的认识 ...

  7. E. String Multiplication

    E. String Multiplication time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  8. mac vim设置python语法高亮

    1 "显示行号  2 set nu  3   4 "设置缩进tabstop  5 set ts=4  6 set shiftwidth=4  7 set expandtab  8 ...

  9. 02Hibernate基本配置

    Hibernate基本配置 1.引入jar 2.建立项目 3.创建实体类 package com.sqlserver.domain; public class Customer { long cust ...

  10. 文件描述符 文件操作 <> open 文件句柄

    #! /usr/bin/perl use strict;use warnings; =head1print "\n---------------------------------test_ ...