先吐槽一下这个难度吧,评的有点高了,但是希望别降,毕竟这是我能做出来的不多的紫题了(狗头)。


大家上来的第一反应应该都是啊,模板题,然后兴高采烈的打了拓补排序的板子,然后搞个小根堆,按照字典序输出就可。但是这样过不了第三组样例,为什么呢?不告诉你呢因为题目让你的仅仅是1后面快点跟2,2后面快点跟3而已,并没有让我们用字典序输出,问题lei了,如何按照题目的要求搞呢?把第三组样例推一下,可以发现\(<5,2>,<4,3>\)都是由于后面的2,3决定的,再推下其他的样例,可以发现一组关系都是根据这组关系较小的那个数字决定的,因为题目让数字小的尽量靠前,而排序不正确也就是因为在前面的那些大的数字干扰了我们去确定后面的那些小的数字,既然前面大的数字会干扰后面小的数字,那我们直接从后面的大的入手,把大的尽量靠后即可,所以直接反向建图,用大根堆维护当前入度为0的序列,最后把拓补排序反过来输出就行。而根据上面的经验,反向建图后再反向输出,加个大根堆,就是让大的尽量靠后,而前面的不会去干扰后面的,所以这样做是正确的(这个地方把它讲明白我想了好久啊,求个赞不过分吧)。

代码就简单了:

#include <bits/stdc++.h>
using namespace std;
int n , tot , T , m;
int f[100010] , ans[100010];
vector<int> e[100010];
int main(){
cin >> T;
while(T--){
cin >> n >> m;
memset(f , 0 , sizeof(f));
for(int i = 1; i <= 100000; i++) e[i].clear(); //清空
tot = 0;
for(int i = 1; i <= m; i++){
int x , y;
cin >> x >> y;
f[x]++;
e[y].push_back(x); //反向建图
}
priority_queue<int> q;
for(int i = 1; i <= n; i++)
if(!f[i]) q.push(i);
while(!q.empty()){
int x = q.top();
q.pop();
ans[++tot] = x;
for(int i = 0; i < e[x].size(); i++){
f[e[x][i]]--;
if(!f[e[x][i]]) q.push(e[x][i]);
}
e[x].clear();
}
if(tot != n){
cout << "Impossible!" << endl;
continue;
}
for(int i = n; i >= 1; i--) cout << ans[i] << " "; //反向输出
cout << endl;
}
return 0;
}

最新文章

  1. 浅尝ECMAScript6
  2. Android入门篇2-activity调用跟数据传递
  3. 【翻译】C# Tips &amp; Tricks: Weak References - When and How to Use Them
  4. 配置Symfony2
  5. 排序,求几个最值问题,输入n个整数,输出其中最小的k个元素。
  6. HDU5669 Road 分层最短路+线段树建图
  7. 推荐系统相关算法:SVD
  8. Hybrid App混合模式开发的了解
  9. Python3+Selenium2完整的自动化测试实现之旅(二):IE和Chrome浏览器驱动配置
  10. mysql数据库目录my.ini的内容
  11. Nginx代理MysqlCluster集群
  12. Ubuntu 安装 Anaconda3 详细步骤
  13. 文件内容统计:对任意给定的.txt文件进行内容的字符数、行数、单词数进行统计
  14. 拦截器通过Spring获取工厂类,注入bean对象
  15. hibernate整合进spring后的事务处理
  16. 70. Climbing Stairs (Array; DP)
  17. python 字典获取最大和最小的value
  18. linux下rz,sz安装
  19. Python面向对象--高级(二)
  20. 课时2:用python设计第一个游戏

热门文章

  1. Java实现 LeetCode 598 范围求和 II(最小值相乘)
  2. Linux用户管理命令useradd、passwd、who详解
  3. sqlite使用dbexpress时数据库不存在自动建立数据库
  4. android在service中stopself遇到的问题
  5. 杨辉三角 js 练习
  6. 利用BeanMap进行对象与Map的相互转换
  7. 【Spring注解驱动开发】在@Import注解中使用ImportSelector接口导入bean
  8. v-on 缩写
  9. redis 的简明教程
  10. Android学习笔记ActionView