逃生

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 74    Accepted Submission(s): 13
Problem Description
糟糕的事情发生啦,如今大家都忙着逃命。

可是逃命的通道非常窄。大家仅仅能排成一行。

如今有n个人,从1标号到n。

同一时候有一些奇怪的约束条件,每一个都形如:a必须在b之前。

同一时候,社会是不平等的。这些人有的穷有的富。1号最富,2号第二富,以此类推。有钱人就贿赂负责人,所以他们有一些优点。

负责人如今能够安排大家排队的顺序,因为收了优点。所以他要让1号尽量靠前,假设此时还有多种情况。就再让2号尽量靠前。假设还有多种情况。就让3号尽量靠前。以此类推。

那么你就要安排大家的顺序。我们保证一定有解。

 
Input
第一行一个整数T(1 <= T <= 5),表示測试数据的个数。

然后对于每一个測试数据,第一行有两个整数n(1 <= n <= 30000)和m(1 <= m <= 100000)。分别表示人数和约束的个数。



然后m行。每行两个整数a和b,表示有一个约束a号必须在b号之前。

a和b必定不同。

 
Output
对每一个測试数据,输出一行排队的顺序,用空格隔开。
 
Sample Input
1
5 10
3 5
1 4
2 5
1 2
3 4
1 4
2 3
1 5
3 5
1 2
 
Sample Output
1 2 3 4 5
 
Author
CLJ
 

思路:
注意此题不是保证字典序,而是要最小的尽量在前面。
反向建图,将大的优先级放前面。然后逆序输出。
首先反向建图+逆序输出为一个答案。

然后要保证最小的在最前面,由于是逆序输出,所以优先级要反过来。


代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define maxn 30005
using namespace std; int n,m,ans;
bool vis[maxn];
int in[maxn];
vector<int>edge[maxn]; int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(in,0,sizeof(in));
for(i=1;i<=n;i++) edge[i].clear();
int u,v;
for(i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
in[u]++;
edge[v].push_back(u);
}
priority_queue<int> q;
for(i=1;i<=n;i++)
{
if(in[i]==0) q.push(i);
}
memset(vis,0,sizeof(vis));
vector<int>res;
ans=0;
while(!q.empty())
{
ans++;
u=q.top();
res.push_back(u);
q.pop();
vis[u]=1;
for(i=0;i<edge[u].size();i++)
{
v=edge[u][i];
in[v]--;
if(in[v]==0) q.push(v);
}
}
for(i=res.size()-1;i>=0;i--)
{
if(i==res.size()-1) printf("%d",res[i]);
else printf(" %d",res[i]);
}
puts("");
}
return 0;
}
/*
20
4 3
4 1
4 2
3 2
*/



hdu 4857 逃生 (拓扑排序+保证最小在前面)的更多相关文章

  1. hdu 4857 逃生 拓扑排序+PQ,剥层分析

    pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...

  2. hdu 4857 逃生 拓扑排序+逆向建图

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Descr ...

  3. hdu 4857 逆向拓扑排序+反向输出

    /*一组测试实例 4 4 2 3 1 2 4 */ #include<stdio.h> #include<string.h> #include<queue> usi ...

  4. HDU.2647 Reward(拓扑排序 TopSort)

    HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...

  5. HDU 4857 逃生 (反向拓扑排序 & 容器实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  6. 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)

    确定比赛名次 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  7. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  8. HDU 4857 逃生(反向建边的拓扑排序+贪心思想)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  9. HDU 4857 逃生(拓扑排序)

    拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈ ...

随机推荐

  1. DockManager 如何快速隐藏DockPanel z

    DockPanel在点击hide按钮时候如果鼠标不离开的话,panel还是没隐藏,某种情况下这种现象着实让人不爽,而且当鼠标离开后默认是很缓慢的隐藏 AutoHideSpeed不设置也可以,主要设置H ...

  2. Kali Linux下安装配置ProFTPD实例

    1.安装ProFTPD 在ftp://ftp.proftpd.org/下能够找到官方公布的各个ProFTPD版本号,本人使用ftp://ftp.proftpd.org/historic/source/ ...

  3. svn(subversion)版本控制系统学习与理解

    定义:Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 从这段话,我们可以得到四点信息: ...

  4. Xcode插件管理器Alcatraz的使用

    Xcode插件管理器Alcatraz的使用 下载地址 https://github.com/alcatraz/Alcatraz 下载软件包 解压以及编译 重启Xode并Load Bundle 安装插件 ...

  5. [翻译] ClockView 时钟

    ClockView 时钟 https://github.com/nacho4d/ClockView Overview ClockView is s simple class that will sim ...

  6. linux下限制ip访问

    inux下最直接限制ip访问的方式有两种: 1.使用hosts.allow和hosts.deny来设置ip白名单和黑名单,/etc/目录下. 优先级为先检查hosts.deny,再检查hosts.al ...

  7. FizzBuzzWhizz问题python解法

    FizzBuzzWhizz 你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏.此时有100名学生在上课.游戏的规则是: 1. 你首先说出三个不同的特殊数,要求必须是个位数,比方3.5. ...

  8. Nginx缓存使用官方教程及常见问题解答

    原文地址:http://www.kuqin.com/shuoit/20150804/347388.html 我们都知道,应用程序和网站一样,其性能关乎生存.但如何使你的应用程序或者网站性能更好,并没有 ...

  9. OpenCV学习(37) 人脸识别(2)

          在前面一篇教程中,我们学习了OpenCV中基于特征脸的人脸识别的代码实现,我们通过代码 Ptr<FaceRecognizer> model = createEigenFaceR ...

  10. Android中XML解析-Dom解析

    Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...