【拓扑排序】[2016"百度之星" - 初赛(Astar Round2A)]Gym Class
来源:互联网 发布:清华知乎 编辑:程序博客网 时间:2024/06/05 19:00
题目
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
分析
由于
代码
#include<cstdio>#include<algorithm>#include<queue>#include<cstring>using namespace std;#define MAXN 100000priority_queue<int>q;int n,m,in[MAXN+10],T;long long ans;template<class T>void Read(T &x){ char c; bool f=0; while(c=getchar(),c!=EOF){ if(c=='-') f=1; if(c>='0'&&c<='9'){ x=c-'0'; while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0'; ungetc(c,stdin); if(f) x=-x; return; } }}struct node{ int v; node *next;}*adj[MAXN+10],edge[MAXN+10],*ecnt=edge;inline void addedge(int u,int v){ node *p=++ecnt; p->v=v; p->next=adj[u]; adj[u]=p;}void read(){ int i,a,b; Read(n),Read(m); for(i=1;i<=m;i++){ Read(a),Read(b); addedge(a,b),in[b]++; }}void topesort(){ int mi=0x7fffffff,i,u; for(i=1;i<=n;i++) if(!in[i]) q.push(i); while(!q.empty()){ u=q.top(); q.pop(); mi=min(u,mi); ans+=mi; for(node *p=adj[u];p;p=p->next) if(!--in[p->v]) q.push(p->v); }}int main(){ Read(T); while(T--){ ans=0; memset(adj,0,sizeof adj); ecnt=edge; read(); topesort(); printf("%I64d\n",ans); } }
0 0
- 2016"百度之星" - 初赛(Astar Round2A)1006 Gym Class(优先队列+拓扑排序)
- 【拓扑排序】[2016"百度之星" - 初赛(Astar Round2A)]Gym Class
- 2016"百度之星" - 初赛(Astar Round2A)Gym Class(拓扑排序)
- 【2016"百度之星" - 初赛(Astar Round2A)】【优先队列+拓扑排序】
- 2016"百度之星" - 初赛(Astar Round2A)解题报告
- [Contest] 2016"百度之星" - 初赛(Astar Round2A)
- 2016"百度之星" - 初赛(Astar Round2A)
- 2016"百度之星" - 初赛(Astar Round2A)题解
- 2016"百度之星" - 初赛(Astar Round2A)题解
- 2016"百度之星" - 初赛(Astar Round2A)
- 2016百度之星 - 初赛(Astar Round2A)题解
- 2016"百度之星" - 初赛(Astar Round2A)解题报告
- 【分治】[2016"百度之星" - 初赛(Astar Round2A)]BD String
- 2016"百度之星" - 初赛(Astar Round2A)
- 2016"百度之星" - 初赛(Astar Round2A) 1002
- 2016"百度之星" - 初赛(Astar Round2A)
- 2016"百度之星" - 初赛(Astar Round2A)1001~1006
- 2016 百度之星初赛 Gym Class(优先队列+拓扑排序)
- JavaScript作用域
- (最全版)Java与C++的异同
- OGG-01232 问题解决
- linux超级块和inode 详解 和 df 、du 命令详解与环境变量
- ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
- 【拓扑排序】[2016"百度之星" - 初赛(Astar Round2A)]Gym Class
- centos 6.7 提示 XX用户不在sudoers 文件中
- OGG-00519 问题解决
- HDU-1166 ( 敌兵布阵 )
- Android基础学习之ListView优化及栏目分类
- Linux下开发环境(gcc/g++/makefile/gdb)
- DT大数据梦工厂Spark定制班笔记(006)
- 阿里云CentOs环境配置
- 基于Flume的野狗实时日志系统的演进和优化