hdu4857 & BestCoder Round #1 逃生(拓扑逆排序+优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?
pid=4857
------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎光临天资小屋:http://user.qzone.qq.com/593830943/main
------------------------------------------------------------------------------------------------------------------------------------------------------
逃生
如今有n个人,从1标号到n。同一时候有一些奇怪的约束条件,每一个都形如:a必须在b之前。
同一时候,社会是不平等的,这些人有的穷有的富。1号最富,2号第二富,以此类推。
有钱人就贿赂负责人,所以他们有一些优点。
负责人如今能够安排大家排队的顺序。因为收了优点,所以他要让1号尽量靠前。假设此时还有多种情况,就再让2号尽量靠前。假设还有多种情况,就让3号尽量靠前,以此类推。
那么你就要安排大家的顺序。我们保证一定有解。
然后对于每一个測试数据,第一行有两个整数n(1 <= n <= 30000)和m(1 <= m <= 100000),分别表示人数和约束的个数。
然后m行,每行两个整数a和b。表示有一个约束a号必须在b号之前。
a和b必定不同。
1
5 10
3 5
1 4
2 5
1 2
3 4
1 4
2 3
1 5
3 5
1 2
1 2 3 4 5
题目要求要求在满足约束条件的情况下,使小的序号尽力靠前。
坑点就在这里。小的序号尽量靠前并非代表字典序。它要求多种情况时,先使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 & BestCoder Round #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 ...
- HDU5777 domino (BestCoder Round #85 B) 思路题+排序
分析:最终的结果肯定会分成若干个区间独立,这些若干个区间肯定是独立的(而且肯定是一边倒,左右都一样) 这样想的话,就是如何把这n-1个值分成 k份,使得和最小,那么就是简单的排序,去掉前k大的(注意l ...
- hdu-----(4857)逃生(拓扑排序)
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- hdu 4857 逃生 拓扑排序+PQ,剥层分析
pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...
- hdu 4857 逃生 拓扑排序+逆向建图
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descr ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- 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 ...
随机推荐
- Unity使用 16bit 压缩 Texture 颜色能均匀过渡
下面是unity自带 16bit 图 的效果,可以看到颜色过度的很不均匀,占用内存 0.5M 如果调成 truecolor 后 颜色过渡很均匀,而内存却占到 1.1 M 讲图片 后缀名改成 ...
- HTML 改变文字方向
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- linux服务器端口netstat
netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的 ...
- web服务之http
HTTP协议 HTTP协议,全称HyperText Transfer Protocol即超文本传输协议,是互联网中最常用的一种网络协议.HTTP协议是互联网上的通信协议方案之一.它有很多的应用, 但最 ...
- H5 <audio> 音频标签自定义样式修改以及添加播放控制事件
H5 <audio> 音频标签自定义样式修改以及添加播放控制事件 Dandelion_drq 关注 2017.08.28 14:48* 字数 331 阅读 2902评论 3喜欢 3 说明: ...
- linux中的strip命令简介------给文件脱衣服【转】
转自:http://blog.csdn.net/stpeace/article/details/47090255 版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则 ...
- 关于ping以及TTL的分析【转】
转自:http://blog.csdn.net/u013451221/article/details/46608881 首先介绍一下ping这个工具 ping [目标] 的意思就是向目标发送几个数据包 ...
- C#图解教程学习笔记——委托
一.委托概述委托和类一样,是用户自定义类型,也是引用类型.但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作. 可以通过以下操作步骤来使用委托:(1)声明一个委托类型.委托声 ...
- cobbler一键部署centos7.4(脚本)
执行脚本之前你需要做四件事 1. 关闭防火墙 2.关闭selinux 3.配置163或者阿里云的 yum源 4.上传centos7.4的镜像如下图 [root@cobbler ~]# cat auto ...
- hdu3452 无向树去掉最小的边集使任何叶子与根不连通 / 最小割
思路一下就上来了,叶子向汇点连边,inf保证不会成为割,跑根到汇点最小割即可.注意无向树双向建边.基础题,分分钟1A: #include<iostream> #include<que ...