文章目录

  • 题目
  • 思路
  • 心得
  • 代码

题目

众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫。
有一天,TT 在 B 站上观看猫猫的比赛。一共有 N 只猫猫,编号依次为1,2,3,…,N进行比赛。比赛结束后,Up 主会为所有的猫猫从前到后依次排名并发放爱吃的小鱼干。不幸的是,此时 TT 的电子设备遭到了宇宙射线的降智打击,一下子都连不上网了,自然也看不到最后的颁奖典礼。
不幸中的万幸,TT 的魔法猫将每场比赛的结果都记录了下来,现在他想编程序确定字典序最小的名次序列,请你帮帮他。

Input

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

Output

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

Sample Input

4 3
1 2
2 3
4 3

Sample Output

1 2 4 3

思路

这是一道拓扑排序的题目

  1. 构建图。
  2. 找出入度为0的点,将其放到队列中。
  3. 这个点去往的所有点度减1,若减去后入度已经为0,则将这些点也加入到队列中去。

最后等队列为空,遍历完成。

心得

  1. 字典序最小的排序,使用优先队列。

代码

#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define LL int
//#define DEBUG
#ifdef DEBUG
#define dprintf printf
#else
#define dprintf  /\
/printf
#endif
using namespace std;struct edge {int to, next;
} es[250005];
vector<int> ans;
int head[505];
int degs[505];void add(int x, int y) {static int i = 0;es[++i].to = y;es[i].next = head[x];head[x] = i;degs[y]++;
}void TopologicalSorting(int n, int m) {memset(head, 0, sizeof(head));memset(degs, 0, sizeof(degs));ans.clear();while (m--) {int p1, p2;scanf("%d %d", &p1, &p2);// cin >> p1 >> p2;add(p1, p2);}priority_queue<int, vector<int>, greater<int>> pq;for (int i = 1; i <= n; i++) {if (degs[i] == 0) pq.push(i);}while (!pq.empty()) {int cur = pq.top();pq.pop();ans.push_back(cur);for (int i = head[cur]; i; i = es[i].next) {int v = es[i].to;if (--degs[v] == 0) {pq.push(v);}}}for (int i = 0; i < n; i++) {if (i == 0)printf("%d", ans[0]);elseprintf(" %d", ans[i]);}printf("\n");
}
int main() {int n, m;while (~scanf("%d %d", &n, &m)) {TopologicalSorting(n, m);}
}

算法-程序设计课week8-作业-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 猫猫向前冲

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

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

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

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

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

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

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

  7. 程序设计思维 week8 作业B-猫猫向前冲

    题目 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有的猫猫从前到后依次排名并发放爱吃的小鱼干.不幸的是,此时 TT 的 ...

  8. 算法-程序设计课week7-作业-B - TT 的旅行日记

    文章目录 题目 思路 路径输出 总的步骤 心得 代码 题目 众所周知,TT 有一只魔法猫. 今天他在 B 站上开启了一次旅行直播,记录他与魔法猫在喵星旅游时的奇遇. TT 从家里出发,准备乘坐猫猫快线 ...

  9. C++程序设计课上机作业

    这是一次学校C++课程上机作业的整理,包含17道题目. 目录

最新文章

  1. 自对齐(self-aligned)
  2. 安卓来电归属地_如何做一名突出的iPhone用户?安卓勿进!
  3. DS博客作业01--日期抽象数据类型设计与实现
  4. 杂谈——杭州考驾照历程
  5. mysql数据库参考_干货:MySQL数据库优化参考
  6. 真相 | 14 岁编程神童谎言坐实,除了谴责我们该反思什么?
  7. Linq中查询List组合相同值数量大于1
  8. 使用windows自带的网络命令工具抓包
  9. python爬网易新闻_爬虫入门:如何用python爬取网易新闻?
  10. Unbuntu ./btest : cannot execute binary file: Exec format error解决方案(CSAPP)
  11. R语言——自定义函数求置信区间
  12. 韦小宝是咱IT人!理由有8!!
  13. 22.【sinx幂级数求和】
  14. swap函数中的交换 【指针】 学习笔记
  15. 【Tools】机器视觉工业相机客户端安装详解教程
  16. mos管 rl_MOS管放大电路
  17. Allegro和Alitum Desiger PCB文件互转方法
  18. m3u8 视频的解密,合并处理 通过java代码
  19. pjsip 屏幕直播
  20. 从OJB到Hibernate的迁移

热门文章

  1. 热搜!华为 30 岁以下员工仅占 28%,网友:35 岁危机呢?
  2. 广西壮族自治区14个地级市行政区划 (2023)
  3. 17 扩展IP访问控制列表配置
  4. 招聘软件测试笔试题及答案,软件测试笔试题及答案 招聘笔试题(一般能力测试50道及答案).doc...
  5. 数据库索引如何创建,它的优缺点。
  6. Echarts实战GEO3D和bar3D延迟显示动画发光柱图的练习(未成功)
  7. STM32L系列flash操作陷阱
  8. Revit二次开发对于BIM正向设计的帮助
  9. 排序算法的稳定性 (什么样的排序是不稳定的)
  10. PCL Getting Start.PCL(Point Cloud Library)入门文档整理