题解报告:hdu 1285 确定比赛名次
Problem Description
Input
Output
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
Sample Input
Sample Output
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
vector<int> vec[maxn];//邻接表,每个节点保存与它相连的边的另一个端点
priority_queue<int, vector<int>,greater<int> >que;//最小堆优先队列
int n,m,u,v,num,InDeg[maxn];//记录每个节点的入度,num用来表示节点的个数
void topsort(){
num=;
for(int i=;i<=n;++i)
if(!InDeg[i])que.push(i);//预处理,先将入度为0的节点编号入队
while(!que.empty()){
int now=que.top();que.pop();num++;
cout<<now<<(num==n?"\n":" ");//同时输出
for(unsigned int i=;i<vec[now].size();++i)//遍历每个节点的相关连节点,一次循环可以将与now有边的多个重复点(还是该点)的入度减为0,这时就直接将其入队
if(--InDeg[vec[now][i]]==)que.push(vec[now][i]);
}
}
int main()
{
while(cin>>n>>m){
for(int i=;i<=n;++i)vec[i].clear();//全部清空
memset(InDeg,,sizeof(InDeg));//全部顶点的度清0
while(m--){
cin>>u>>v;
vec[u].push_back(v);//u指向v
InDeg[v]++;//v的入度加1
}
topsort();//拓扑排序
}
return ;
}
AC代码二:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = ;
int cnt, n, m, x, y, num, now, Indeg[maxn], head[maxn];
struct EDGE{int to, val, next;}edge[ * maxn];
priority_queue<int, vector<int>, greater<int> > que; ///最小堆
void add_edge(int u, int v, int w) { ///链式向前星
edge[cnt].to = v;
edge[cnt].val = w;
edge[cnt].next = head[u];
head[u] = cnt++;
}
void topsort() {
while(!que.empty()) que.pop();
num = ;
for(int i = ; i <= n; ++i) ///入度为0的先入队列
if(!Indeg[i]) que.push(i);
while(!que.empty()) {
now = que.top(), que.pop(); num++;
cout << now << " \n"[num == n];
for(int i = head[now]; ~ i; i = edge[i].next)
if(--Indeg[edge[i].to] == ) que.push(edge[i].to);
}
}
int main() {
while(cin >> n >> m) {
cnt = ;
memset(head, -, sizeof(head));
memset(Indeg, , sizeof(Indeg));
while(m--) {
cin >> x >> y;
add_edge(x, y, ); /// p1 ---> p2 , p1先拓扑,即排名在前
Indeg[y]++;
}
topsort();
}
return ;
}
题解报告:hdu 1285 确定比赛名次的更多相关文章
- ACM: HDU 1285 确定比赛名次 - 拓扑排序
HDU 1285 确定比赛名次 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- HDU.1285 确定比赛名次 (拓扑排序 TopSort)
HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...
- 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)
确定比赛名次 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- HDU 1285 确定比赛名次(简单拓扑排序)
题目链接: 传送门 确定比赛名次 Time Limit: 1000MS Memory Limit: 65536K Description 有N个比赛队(1 Input 输入有若干组,每组中的第 ...
- HDU 1285 确定比赛名次
传送门 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 1285 确定比赛名次 (拓扑)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1285 确定比赛名次【字典序最小的拓扑排序 + 优先队列】
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- [ACM] hdu 1285 确定比赛名次 (拓扑排序)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU——1285 确定比赛名次
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- hdu 1285 确定比赛名次 (topsort)
确定比赛名次Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- String HDU 5672(双指针)
String HDU 5672(双指针) 传送门 题意:一个字符串中找到所有拥有不少于k个不同的字符的子串. import java.io.*; import java.util.*; public ...
- Python基础(八)装饰器
今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...
- spring cloud feign 坑
feign是啥? 很多人可能对于feign 不是很熟悉,可以看一下其他网友的实例分享:spring cloud feign简介 如果觉得上面这个比较难的话,还有一个简单入门的:spring cplou ...
- 【05】JSON笔记
[05]笔记 尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透 ...
- 转载 - Struts2 拦截器详细配置过程
出处:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html Struts2 拦截器详细配置过程 1:所有拦截器的超级接口Inter ...
- J2EE 课件3 JSP标记
•JSP标记包括指令标记.动作标记和自定义标记.其中自定义标记主要讲述与Tag文件有关的Tag标记 1.指令标记page page 指令用来定义整个JSP页面的一些属性和这些属性的值,属性值用单 ...
- CodeForces 370C
这道题其实是挺简单的.首先很容易发现最多人用的颜色的人数如果大于n/2,就肯定不能让全部人都成功戴上两只不同颜色的手套.反过来想,如果这个人数小于等于n/2又如何呢?的确,这就能让全部人都能戴上两只不 ...
- Hyper-v交换机添加出错解决方法
这个问题中文找不到解决方法,只能重新安装系统了 重新安装系统后,按照顺序操作,不要去动设备管理器中的东西,也不用动驱动,先删除虚拟机的网络连接,在删除虚拟交换机就可以了,没有再出现问题
- word分节时,如何让每一节的首页置为奇数页
具体操作,可参考如下图片所示的步骤: 打印时的效果: 备注:目录页为第二小节首页(文档的第二页),整个文档的首页为封面第一页. 打印时,会在首页后自动插入一张空白页:也会在正文(第三页,第三节)前,目 ...
- Canopy算法计算聚类的簇数
Kmeans算是是聚类中的经典算法.步骤例如以下: 选择K个点作为初始质心 repeat 将每一个点指派到近期的质心,形成K个簇 又一次计算每一个簇的质心 until 簇不发生变化或达到最大迭代次数 ...