[ACM] hdu 1285 确定比赛 (拓扑排序)
确定比赛
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10358 Accepted Submission(s): 4046
其它说明:符合条件的排名可能不是唯一的。此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
4 3 1 2 2 3 4 3
1 2 4 3
解题思路:
原理:拓扑排序是应用于有向无回路图(DAG)上的一种排序方式。对一个有向无回路进行拓扑排序后,全部的顶点形成一个序列,对全部边(u,v),满足u在v的前面。该序列说明了顶点表示的事件或 状态发生的总体顺序。比較经典的是在project活动上,某些project完毕后。还有一些project才干继续,此时能够以project为顶点,project间的依赖关系为边建立图。用拓扑排序来求得全部project的合理运行顺序。
对一个DAG进行拓扑排序有两种方法,广度优先搜索和深度优先搜索。
这里介绍广度优先搜索。进行拓扑排序时,每次能够拿出的顶点一定是入度为0的点,即没有被指向的点,由于这种点表示的事件没有依赖。在一个入度为0的点表示的事件运行完之后。它所指向的顶点所依赖的点就少了一个。所以我们能够先将全部入度为0的点增加一个队列中。然后依次将它们所指向的点的入度减1,再将入度变为0的点也依次增加队列中。这样最后就能够得到一个拓扑有序的序列。
本题中说符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前。须要用到优先队列,每次从队列中取的是最小的那个元素。
代码:
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #include <queue>
- using namespace std;
- const int maxn=510;
- int graph[maxn][maxn];//保存图
- int degree[maxn];//保存入度
- int main()
- {
- int n,m;
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- memset(graph,0,sizeof(graph));
- memset(degree,0,sizeof(degree));
- for(int i=0;i<m;i++)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- if(!graph[u][v])
- {
- graph[u][v]=1;
- degree[v]++;//v的入度++
- }
- }
- priority_queue<int,vector<int>,greater<int> >q;
- for(int i=1;i<=n;i++)
- if(degree[i]==0)
- q.push(i);
- bool first=1;
- while(!q.empty())
- {
- int cur=q.top();
- q.pop();
- if(first)
- {
- cout<<cur;
- first=0;
- }
- else
- cout<<" "<<cur;
- for(int i=1;i<=n;i++)
- {
- if(graph[cur][i])
- {
- degree[i]--;//相连的点的入度减1
- if(degree[i]==0)//假设入度为0,增加队列
- q.push(i);
- }
- }
- }
- printf("\n");
- }
- return 0;
- }
版权声明:本文博主原创文章。博客,未经同意不得转载。
[ACM] hdu 1285 确定比赛 (拓扑排序)的更多相关文章
- ACM: HDU 1285 确定比赛名次 - 拓扑排序
HDU 1285 确定比赛名次 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- [ACM] hdu 1285 确定比赛名次 (拓扑排序)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU.1285 确定比赛名次 (拓扑排序 TopSort)
HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...
- 题解报告:hdu 2647 Reward(拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 Problem Description Dandelion's uncle is a boss ...
- hdu 1285 确定比赛名次 拓扑排序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛 ...
- HDU 1285 确定比赛名次(拓扑排序模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意:有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行 ...
- 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)
确定比赛名次 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- HDU 1285 确定比赛名次 拓扑排序模板题
http://acm.hdu.edu.cn/showproblem.php?pid=1285 #include <cstdio> #include <cstdlib> #inc ...
- HDU 1285 确定比赛名次(拓扑排序)题解
Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...
随机推荐
- UBUNTU12.04下安装配置体验gnome3
年. ubuntu12.04默认采用unity界面,但是自己更加喜欢gnome3的操作方式. 安装gnome3: sudo apt-get install gnome-shell 其实安装成功后,注 ...
- mySQL中删除unique key的语法 (删除某个字段的唯一性)
mySQL中删除unique key的语法 CREATE TABLE `good_booked` ( `auto_id` int(10) NOT NULL auto_increment, `goo ...
- Linux 下开启ssh服务(转)
二.SSH SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目 ...
- js阻止冒泡
js阻止冒泡 (ev || event).cancelBubble = true; 标签切换 <script type="text/javascript"> windo ...
- Java代码检查工具
FindBugs:不注重样式和格式,重视真正的缺陷和潜在的性能问题,,基于Bug Patterns,在不运行的情况下检查字节码代码质量. Jalopy:Java源代码格式化工具,可自定义规则. PMD ...
- 在Apk应用程序内,查找某个Activity。
转载请注明出处:http://blog.csdn.net/droyon/article/details/39933677 Intent intent = new Intent(Intent.ACTIO ...
- mod_python模块安装
两.mod_python 1.性能 使用mod_python的主要优势在于比传统CGI更高的性能. 一个測试,使用在Pentium 1.2GHz的机器上执行Red Hat Linux 7.3.使用4种 ...
- NGUI判断是否点击到UI控件
注意:UI应加上Box Collider 1.射线检测 UICamera发一条射线,射线碰到了东西就说明点击到了UI Ray ray=UICamera.mainCamera.ScreenPointTo ...
- xml它解析----DOM解析
DOM模型(documentobject model) •DOM解析器在解析XML文档时,会把文档中的全部元素,依照其出现的层次关系.解析成一个个Node对象(节点). •在dom中.节点之间关系例如 ...
- MMTool制作Ozmosis引导BIOS完美引导OS X系统
Ozmosis引导是德国黑苹果爱好者制作的一个引导程序,目前仍处于测试版,有了它,你可以不用再使用四叶草.变色龙之类引导工具,相对而言它更象白苹果.Ozmosis是基于AMI公司bios的硬件引导驱动 ...