题目链接:http://acm.hdu.edu.cn/showproblem.php?

pid=4857

------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎光临天资小屋http://user.qzone.qq.com/593830943/main

------------------------------------------------------------------------------------------------------------------------------------------------------

逃生

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

Total Submission(s): 619    Accepted Submission(s): 167
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
 
Source

题目要求要求在满足约束条件的情况下,使小的序号尽力靠前。

坑点就在这里。小的序号尽量靠前并非代表字典序。它要求多种情况时,先使1靠前(可能1仅仅能在第2或第3位 那么就要使它在第2位),其次2,3。。而不是在当前情况下。该位最小是哪个就输出哪个



代码例如以下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
#define N 30017
int n, m;
int i, j, k;
int v[N],ans[N];
vector<int>P[N];
void init()
{
memset(ans,0,sizeof(ans));
memset(v,0,sizeof(v));
}
void Topsort()
{
priority_queue<int>Q;
int size, t;
for(i = 1; i <= n; i++)
{
if(v[i] == 0)
Q.push(i);
}
while(!Q.empty())
{
t = Q.top();
Q.pop();
size = P[t].size();
for(i = 0; i < size; i++)//相关联的入度减1
{
v[P[t][i]]--;
if(v[P[t][i]] == 0)
Q.push(P[t][i]);
}
ans[k++] = t;
}
}
int main()
{
int T;
int a, b;
scanf("%d",&T);
while(T--)
{
init();
scanf("%d%d",&n,&m);
for(i = 1; i <= n; i++)//清空
{
P[i].clear();
}
for(i = 0; i < m; i++)
{
scanf("%d%d",&a,&b);
v[a]++;
P[b].push_back(a);//逆向建图。在b后面加入a
}
k = 0;
Topsort();
for(i = n-1; i > 0; i--)//逆向输出
{
printf("%d ",ans[i]);
}
printf("%d\n",ans[0]);
}
return 0;
}

hdu4857 &amp; BestCoder Round #1 逃生(拓扑逆排序+优先队列)的更多相关文章

  1. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

  2. HDU5777 domino (BestCoder Round #85 B) 思路题+排序

    分析:最终的结果肯定会分成若干个区间独立,这些若干个区间肯定是独立的(而且肯定是一边倒,左右都一样) 这样想的话,就是如何把这n-1个值分成 k份,使得和最小,那么就是简单的排序,去掉前k大的(注意l ...

  3. hdu-----(4857)逃生(拓扑排序)

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

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

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

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

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

  6. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  7. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

  8. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

  9. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

随机推荐

  1. javaScript 笔记(5) --- jQuery(上)

    这节整理整理 iquery.js 相关的内容... 目录 --- jQuery 语法 --- 文档就绪事件 --- jQuery 选择器 --- jQuery 事件 --- jQuery 效果 jQu ...

  2. pat 团体天梯赛 L1-039. 古风排版

    L1-039. 古风排版 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 中国的古人写文字,是从右向左竖向排版的.本题就请你编写 ...

  3. (二) Spring项目的搭建

    传统的项目搭建,是将所依赖的第三方jar包复制到项目的类路径下.但是,这样带来的问题是,无法更好的对这些jar包进行动态管理. 目前主流的构建工具有:Ant.Maven.Gradle.以Maven为例 ...

  4. BZOJ 2813: 奇妙的Fibonacci

    2813: 奇妙的Fibonacci Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 497  Solved: 134[Submit][Status][ ...

  5. 为IIS添加json扩展类型文件的MiME类型

    IIS6.0 1.打开IIS添加Mime项 关联扩展名:*.json内容类型(MIME):application/x-javascript      2.添加映射: 位置在IIS对应站点右键属性:”主 ...

  6. DataSet导出到Excel文件

    public static void ExportToExcel(DataSet source, string fileName) { System.IO.StreamWriter excelDoc ...

  7. python字符串加密与反解密

    在生产中会遇到很多情况是需要加密字符串的(如访问或存储密码)这些需求造就了需要字符串加密,以及反解密的问题,推荐两种方法来实现,下附代码: #!/usr/bin/env python3 # -*- c ...

  8. python的上下文管理

    说道上下文管理首先想到的就是这个: class MyResource: def __enter__(self): print("查询开始") return self def __e ...

  9. Python学习杂记_7_文件操作

    文件操作 Python3用open()方法打开文件并返回文件句柄,有了文件句柄就可以对文件进行各种操作了. 打开文件: open(“文件名” , 打开方式)            如: f=open( ...

  10. AutoResetEvent 和 ManualResetEvent 多线程应用

    AutoResetEvent 1.用于在多线程,对线程进行阻塞放行 static AutoResetEvent auth0 = new AutoResetEvent(false); static Au ...