hdoj-5695-Gym Class
来源:互联网 发布:矩阵函数的导数和积分 编辑:程序博客网 时间:2024/06/14 11:10
Problem Description
众所周知,度度熊喜欢各类体育活动。
今天,它终于当上了梦寐以求的体育课老师。第一次课上,它发现一个有趣的事情。在上课之前,所有同学要排成一列, 假设最开始每个人有一个唯一的ID,从1到N ,在排好队之后,每个同学会找出包括自己在内的前方所有同学的最小ID,作为自己评价这堂课的分数。麻烦的是,有一些同学不希望某个(些)同学排在他(她)前面,在满足这个前提的情况下,新晋体育课老师——度度熊,希望最后的排队结果可以使得所有同学的评价分数和最大。
今天,它终于当上了梦寐以求的体育课老师。第一次课上,它发现一个有趣的事情。在上课之前,所有同学要排成一列, 假设最开始每个人有一个唯一的ID,从1到
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
31 02 11 23 13 1
Sample Output
126
拓扑排序
利用贪心可知,如果要所有人的分数和最高,需要把序号大的优先放在前面。其次,对于a的前面不能为b,那么只能a在b前面了
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace std; typedef long long ll; #define maxn 100005 vector<int>v[maxn]; int d[maxn],w[maxn]; int a,b,x,y; void topsort() { int k=1; //printf("a=%d b=%d\n",a,b); priority_queue<int>q; //for(int i=1;i<=a;i++) printf("%d\n",d[i]); for(int i=1;i<=a;i++) if(!d[i]) q.push(i); while(!q.empty()) { int t=q.top(); q.pop(); w[k++]=t; for(int i=0;i<v[t].size();i++) { int cnt=v[t][i]; d[cnt]--; if(!d[cnt]) q.push(cnt); } } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&a,&b); for(int i=1;i<=a;i++) v[i] .clear(); memset(d,0,sizeof(d)); memset(w,0,sizeof(w)); while(b--) { scanf("%d%d",&x,&y); v[x].push_back(y); d[y]++; } topsort(); int minn=maxn; ll ans=0; for(int i=1;i<=a;i++) { minn=min(minn,w[i]); ans+=(ll)minn; } printf("%I64d\n",ans); } return 0; }
0 0
- hdoj-5695-Gym Class
- HDOJ-----5695Gym Class拓扑(vector)
- HDOJ-【Gym Class】
- HDU 5695 Gym Class
- hdu 5695 Gym Class
- HDU 5695 Gym Class
- HDU 5695 Gym Class
- 【HDU 5695 Gym Class】
- HDU 5695 Gym Class
- hdu 5695 Gym Class
- Gym Class
- HDU 5695 Gym Class(拓扑排序)
- 拓扑 hdu 5695(Gym Class)
- 【HDU】5695 - Gym Class(拓扑)
- HDU-5695 Gym Class(拓扑排序)
- HDU 5695 Gym Class 拓扑排序
- HDU 5695 Gym Class 拓扑排序
- hdu5696 Gym Class
- 广告点击率预测 [离线部分]
- 实例方法和类方法的区别
- 【2016杭电女生赛1003】【暴力】Luck Competition 选数平均数乘2除3 小且最接近的数
- spark 测试题
- .Net 面试题整理(一)
- hdoj-5695-Gym Class
- Java---网络编程-C/S-B/S基础知识
- Elasticsearch--索引操作
- ViewPager无限轮播+手动滑动+AsyncTask异步交互机制实例
- 动画requestAnimationFrame
- 左手坐标系和右手坐标系
- Java学习笔记1
- Android获取私有存储目录
- Java千百问_07JVM架构(007)_java堆内存是什么样的