题目描述

众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫。

有一天,TT 在 B 站上观看猫猫的比赛。一共有 N 只猫猫,编号依次为1,2,3,…,N进行比赛。比赛结束后,Up 主会为所有的猫猫从前到后依次排名并发放爱吃的小鱼干。不幸的是,此时 TT 的电子设备遭到了宇宙射线的降智打击,一下子都连不上网了,自然也看不到最后的颁奖典礼。

不幸中的万幸,TT 的魔法猫将每场比赛的结果都记录了下来,现在他想编程序确定字典序最小的名次序列,请你帮帮他。

输入格式

输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示猫猫的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即编号为 P1 的猫猫赢了编号为 P2 的猫猫。

输出格式

给出一个符合要求的排名。输出时猫猫的编号之间有空格,最后一名后面没有空格!

其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。

样例输入

4 3
1 2
2 3
4 3

样例输出

1 2 4 3

模型:拓扑排序

在一个有向无环图里,我们对图中的点进行排序,对于任意有向边(u,v),u必在v前面。
我们可以将图中入度为0的点加入一个集合S,从S中取出任意点u,对于该点,若存在边(u,v)则去除该边,则v入度减1,若入度变为0则同理加入集合。一直重复这一过程,则点出集合的顺序即为该图的一个拓扑序列。
若最后仍有点未排序,则图中必有环。

思路

猫的胜负关系即可想象成图中的边,a胜b,则有a指向b的边,这些点的拓扑序列即为最终名次。因为要求输出字典序最小的拓扑序列,因此集合可用一个最小堆来代替,这时求出的拓扑序列即为所求。

代码

#include <iostream>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
const int M=100000+10;
const int N=500+10;
struct Edge{int to,next;
}e[M];
int head[N],cnt[N],tot=0;
void add(int u,int v)
{e[++tot].to=v;e[tot].next=head[u];head[u]=tot;
}int main(int argc, char** argv) {int n,m;while(~scanf("%d%d",&n,&m)){priority_queue<int,vector<int>,greater<int>>q;tot=0;for(int i=0;i<=n;i++)head[i]=0,cnt[i]=0;for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);add(a,b);cnt[b]++;}for(int i=1;i<=n;i++)if(cnt[i]==0)q.push(i);bool flag=false;while(!q.empty()){int now=q.top();q.pop();if(flag)printf(" %d",now);elseprintf("%d",now),flag=true;for(int i=head[now];i;i=e[i].next){int v=e[i].to;cnt[v]--;if(cnt[v]==0)q.push(v);}}printf("\n");}return 0;
}

【Week 8 作业 B】猫猫向前冲相关推荐

  1. week8 作业B 猫猫向前冲

    猫猫向前冲 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所 ...

  2. WEEK8 作业 B - 猫猫向前冲

    B - 猫猫向前冲 题目描述 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束 ...

  3. week8 作业B 猫猫向前冲 kahn

    思路分析 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有 ...

  4. Week8 作业——B - 猫猫向前冲

    题目 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有的猫 ...

  5. 程序设计思维与实践 Week8 作业 B 猫猫向前冲

    题目描述: 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所 ...

  6. 程序设计思维与实践 Week8 作业 B - 猫猫向前冲

    问题描述 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有 ...

  7. 第八周作业——猫猫向前冲

    猫猫向前冲 一.题目 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up ...

  8. Week8 B - 猫猫向前冲

    Week8 B - 猫猫向前冲 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结 ...

  9. 猫猫向前冲 Week8作业B题

    题目: 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有的 ...

  10. 程序设计思维 B - 猫猫向前冲(拓扑排序、Kahn算法)

    题目 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有的猫 ...

最新文章

  1. LNMP_ 配置文件
  2. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset
  3. 029_jdbc-mysql二进制数据
  4. 分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
  5. 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
  6. NET问答: 如何在 ASP.NET Core 的 .json 文件中读取 AppSettings ?
  7. C# 延时小函数 很好用
  8. Java系列之雪花算法和原理
  9. 4.Python标准库_文件管理 (部分os包,shutil包)
  10. java中Jackson_在Java中使用Jackson的JSON模式支持?
  11. SQL Server 2008中SQL之WaitFor
  12. Spring Boot的自动装配原理
  13. HDU-1358 Period KMP
  14. 用python写一个简单的爬虫_用Python从零开始写一个简单爬虫
  15. golang orm对比
  16. b85主板装服务器系统,华硕b85主板装不上win7怎么办
  17. 计算机专业毕业了,还要不要参加培训班
  18. 硬盘分区形式之MBR、GPT
  19. AD(altium designer)15原理图与PCB设计教程(六)——印制电路板设计的基础知识
  20. OpenGL多重纹理使用与理解

热门文章

  1. 使用百度 EasyDL 实现电动车进电梯自动预警
  2. 手扶电梯缺陷检测图像数据集(VOC标签)
  3. Slicer学习笔记(十七)编写一个python扩展模块
  4. Tragic Design 免积分下载
  5. 三阶魔方复原操作方法
  6. 我的管理成长与思考 - 那些领导的真相,理解和思考
  7. 杭州-千岛湖(入门篇骑行)
  8. vant中picker选择器
  9. -- 自古多情空余恨~~~~
  10. 简述敏捷开发中的测试流程