题目链接:acm.hdu.edu.cn/showproblem.php?pid=5695

Problem Description

众所周知,度度熊喜欢各类体育活动。
今天,它终于当上了梦寐以求的体育课老师。第一次课上,它发现一个有趣的事情。在上课之前,所有同学要排成一列, 假设最开始每个人有一个唯一的ID,从1到N,在排好队之后,每个同学会找出包括自己在内的前方所有同学的最小ID,作为自己评价这堂课的分数。麻烦的是,有一些同学不希望某个(些)同学排在他(她)前面,在满足这个前提的情况下,新晋体育课老师——度度熊,希望最后的排队结果可以使得所有同学的评价分数和最大。

Input

第一行一个整数T,表示T(1≤T≤30) 组数据。
对于每组数据,第一行输入两个整数N和M(1≤N≤100000,0≤M≤100000),分别表示总人数和某些同学的偏好。
接下来M行,每行两个整数A 和B(1≤A,B≤N),表示ID为A的同学不希望ID为B的同学排在他(她)之前。你可以认为题目保证至少有一种排列方法是符合所有要求的。

Output

对于每组数据,输出最大分数 。

Sample Input

3
1 0
2 1
1 2
3 1
3 1

Sample Output

1
2
6
解题思路:要使得所有同学的评价分数和最大,必须每次拓扑出最大的id值(采用优先队列最大堆来实现),再保存当前已拓扑的最小id即为队列中后面学生的课堂分数,并且把每次分数相加起来即为评价的总分数,水过!
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int maxn=100005;
 5 vector<int> vec[maxn];
 6 priority_queue<int> que;//默认最大堆,id越靠前的最后的评价分数将会是最大的
 7 int t,n,m,a,b,minid,InDeg[maxn];LL sum;bool flag;
 8 void topsort(){
 9     while(!que.empty())que.pop();//清空队列
10     for(int i=1;i<=n;++i)
11         if(!InDeg[i])que.push(i);
12     flag=false;
13     while(!que.empty()){
14         int now=que.top();que.pop();//取出当前最大的id,并且出队
15         if(!flag){minid=now;flag=true;}//开关:记录第一个拓扑的id值
16         minid=min(minid,now);sum+=minid;//每次更新最小的id,并且加入到sum当中
17         for(size_t i=0;i<vec[now].size();++i)//更新每个邻接点的入度数
18             if(--InDeg[vec[now][i]]==0)que.push(vec[now][i]);
19     }
20 }
21 int main(){
22     scanf("%d",&t);
23     while(t--){
24         scanf("%d%d",&n,&m);sum=0;
25         memset(InDeg,0,sizeof(InDeg));
26         for(int i=1;i<=n;++i)vec[i].clear();//每个邻接矩阵连接对应清空
27         while(m--){
28             scanf("%d%d",&a,&b);
29             vec[a].push_back(b);//邻接表:a指向b
30             InDeg[b]++;//b的入度加1
31         }
32         topsort();printf("%lld\n",sum);
33     }
34     return 0;
35 }

转载于:https://www.cnblogs.com/acgoto/p/9313373.html

题解报告:hdu 5695 Gym Class(拓扑排序)相关推荐

  1. HDU 5695 Gym Class 拓扑排序

    Gym Class 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5695 Description 众所周知,度度熊喜欢各类体育活动. 今天,它终于当 ...

  2. 题解报告:hihoCoder #1175:拓扑排序·二

    题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...

  3. 2016百度之星 - 初赛(Astar Round2A)Gym Class(拓扑排序)

    Gym Class  Accepts: 849  Submissions: 4247  Time Limit: 6000/1000 MS (Java/Others)  Memory Limit: 65 ...

  4. hdu 4109 Instrction Arrangement 拓扑排序 关键路径

    这个算是关键路径的模版题目了,解这个题目之前,首先说下关键路径的含义,传送门(度娘),个人的见解是,关键路径就是木桶的短板问题,比如有一群人约好去某个地方,大家从同一个地方同一时间开始出发,有些人选择 ...

  5. HDU 4857 逃生(拓扑排序)

    拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈ ...

  6. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  7. HDU hdu 2094 产生冠军 拓扑排序 判定环

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2094 对于是否有环,是通过一个N(节点数)的循环来判定.检查并更新每个节点的入度数. 每找到一个入度唯 ...

  8. HDU 4917 Permutation(拓扑排序 + 状压DP + 组合数)

    题目链接 Permutation 题目大意:给出n,和m个关系,每个关系为ai必须排在bi的前面,求符合要求的n的全排列的个数. 数据规模为n <= 40,m <= 20. 直接状压DP空 ...

  9. hdu 5438 Ponds 拓扑排序

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

最新文章

  1. mysql 5.5 编译参数_Mysql 5.5 编译参数
  2. 微生物组-宏基因组分析专题研讨会(2022.5)
  3. 《剑指offer》-左旋转字符串
  4. STM32 基础系列教程 41 – SDMMC
  5. java keyadapter_在java中使用keyAdapter和keyEvent时出错
  6. java面向对象编程的三大基本特性--封装,继承,多态
  7. 25马5跑道,求最快的五匹马的需要比赛的次数
  8. mysql 常用存储引擎InnoDBMyISAM表格对比
  9. 适配iOS10以及Xcode8
  10. jquery中的ajax方法参数
  11. 日均百亿级日志处理:微博基于 Flink 的实时计算平台建设
  12. python老齐_python-basic
  13. 数学建模之预测模型简要分析
  14. 冒险岛079单机/小范围联机游戏搭建
  15. git基础命令以及用法
  16. 论文阅读:Seg4Reg+: Consistency Learning Between Spine Segmentation and Cobb Angle Regression
  17. 【屏幕灯】MI电脑显示器灯条用户手册
  18. BGP是做什么的?怎么去配置BGP?
  19. Android刷机SD卡分区指南 [
  20. floor()报错注入

热门文章

  1. 土人系列AS入门教程--实战篇
  2. C/C++语言之 日期 时间
  3. 人工智能70年商业变现艰难,新基建能否催生规模化落地?
  4. 免费科研数据集大搜索,来源于互联网~
  5. 北京大力度建设城市绿道,我们身边处处是风景
  6. 填空题C语言,c语言填空题试卷.doc
  7. java用集合类求数组交并集_java 并集 数组/集合 有重复元素需 保留(急)
  8. android 观察者的框架,Android 架构师7 设计模式之观察者模式
  9. 远程连接oracle01017,连接Oracle远程数据库错误:ORA-12541,ORA-12514,ORA-01017的解决方法!...
  10. matlab的index函数,写论文第九天:MATLAB之rsindex函数