hdu4857 逃生 bestcoder round1 A
题目要求要求在满足约束条件的情况下,使小的序号尽力靠前。
坑点就在这里。小的序号尽量靠前并非代表字典序,它要求多种情况时,先使1靠前(可能1仅仅能在第2或第3位 那么就要使它在第2位),其次2,3。
。而不是在当前情况下,该位最小是哪个就输出哪个
所以直接拓扑排序。或者优先队列都是错的。由于这样都仅仅能保证字典序最小。能够參考代码后面的例子理解
正确做法应该是 反向建图后,用最大值优先的优先队列来拓扑排序,这样能保证在可能的情况下,先选最大的,把最小的留到最后选。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
const int maxn=30010;
using namespace std; vector<int> e[maxn];
int n,m,in[maxn],ans[maxn],cnt; struct cmp
{
bool operator ()(int &a,int &b){
return a<b;//最大值优先
}
}; void topo()
{
priority_queue<int,vector<int>,cmp> q;
for(int i=1;i<=n;i++)
if(in[i]==0) q.push(i);
int flag=0;
int x,i;
while(!q.empty())
{
x=q.top();
q.pop();
ans[++cnt]=x;
for(i=0;i<e[x].size();i++)
{
in[e[x][i]]--;
if(in[e[x][i]]==0)
q.push(e[x][i]);
}
}
} int main()
{
int t,a,b,i;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
e[i].clear();
memset(in,0,sizeof in);
while(m--)
{
scanf("%d%d",&a,&b);
e[b].push_back(a);
in[a]++;
}
cnt=0;
topo();
printf("%d",ans[cnt]);
for(i=cnt-1;i>0;i--)
printf(" %d",ans[i]);
puts("");
}
return 0;
}
/*
4 2
3 2
4 1
应该输出4132
*/
hdu4857 逃生 bestcoder round1 A的更多相关文章
- hdu4857 & BestCoder Round #1  逃生(拓扑逆排序+优先队列)
		题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4857 ----------------------------------------------- ... 
- HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)
		逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会 ... 
- hdu-----(4857)逃生(拓扑排序)
		逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ... 
- hdu-4857 逃生(拓扑序)
		题目链接: 逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Proble ... 
- HDU-4857 逃生(反向拓扑排序 + 逆向输出)
		逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ... 
- hdu4858 项目管理 bestcoder round1 B
		唔..弱弱的暴力水果 0操作时,将v加到u上,能够直接把v加到u相连的点上,这样输出时直接输出要求点的值. 布这种话反正我是超时了.. #include<cstdio> #include& ... 
- HDU4857 逃生   拓扑排序
		Problem Description糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同 ... 
- HDU-4857 逃生(逆向拓扑排序)
		Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前. ... 
- hdu 4857  逃生 拓扑排序+PQ,剥层分析
		pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ... 
随机推荐
- C++学习之路—多态性与虚函数(二)纯虚函数与抽象类
			(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1 纯虚函数 在前面的博客中已经提到:有时 ... 
- PLSQL数据导入
			导入数据 (1) 首先以管理员身份登录plsql; (2) 新建命令窗口 (3) 创建用户,设置帐号,密码 创建语句:create user usernameidenti ... 
- UVA 10795 - A Different Task(递归)
			A Different Task The (Three peg) Tower of Hanoi problem is a popular one in computer science. Brie ... 
- A*寻路算法的实现
			原理:http://www.cppblog.com/christanxw/archive/2006/04/07/5126.html 算法理论请到原理这个传送门,代码中的注释,已经比较详细,所以我不会讲 ... 
- Win7和VS2013上使用Intel的TBB
			源地址:http://www.th7.cn/system/win/201505/103966.shtml http://wenku.baidu.com/link?url=zH7vwmWltWF5R-9 ... 
- 大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心
			大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心 大白菜U盘启动制作工具装机维护版V5.0 
- Memcached 群集高可用性(HA)架构
			Memcache本身并不实现集群功能.假设你想使用Memcahce集群需要使用第三方软件或编程来实现自己的设计,这里将被用来memagent实现代理,memagent也被称为magent.我们注意到, ... 
- delphi 自我删除和线程池(1000行代码,需要仔细研究)
			unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ... 
- ezw证件照芯片压缩算法
			相关网站:http://m.blog.csdn.net/blog/kimwu/12654517 http://blog.sina.com.cn/s/blog_4be751690100bsgb.html ... 
- 24位和8位BMP图片保存纯C代码
			BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ... 
