题解-排队

这篇博客介绍了一个关于学生排队的问题,老师需要满足所有学生位置的要求。通过输入的n名同学和m条要求,需要找出一种排队方案。问题可以通过拓扑排序来解决,初始的解决方案可能会导致错误,但通过优化,使用栈来输出结果可以得到正确答案。
摘要由CSDN通过智能技术生成

排队
描述

今天,学校老师让同学们排成一队,准备带大家出去玩,一共有 n 名同学,排队的时候同学们向老师提了 m 条要求,每一条要求是说同学 x 一定要排在同学 y 之前,老师现在想找到一种排队方式可以满足所有的要求,你能帮帮他吗?

输入
第一行两个整数 n,m(1≤n≤10^4, 1≤m≤10^5 ),表示同学数和要求数;

以下 m 行,每行两个整数 x,y,之间用一个空格隔开,表示某个要求是第 x 号同学要排在第 y 号同学之前,所有同学的编号由 1 开始;
输入保证有解。

输出
输出一行,包括 n 个整数,表示从前往后同学的编号,用空格隔开,如果答案不唯一,输出字典序最小的答案。

输入样例 1

2 1
1 2
输出样例 1

1 2
提示

提示:使用优先队列进行拓扑排序

这个题就是一个简单的模板题,只需要拓扑排序的基本代码来进行写就行了。
基础代码:

#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100;
const int MAX_M = 10000;
struct edge{
	int v, next;
	int len;
}E[MAX_M];
int p[MAX_N],eid;
void init(){
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值