HDU 4857 拓扑排序 优先队列
n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移。输出序列
大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得到的序列就是从大到小的,最后倒序输出就行了。
写这题的时候头好痛阿肚子好痛阿,再也不想熬夜了,一点效率都没有。
/** @Date : 2017-09-29 19:29:12* @FileName: HDU 4857 拓扑排序 + 优先队列.cpp* @Platform: Windows* @Author : Lweleth (SoungEarlf@gmail.com)* @Link : https://github.com/* @Version : $Id$*/
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8;int deg[30010];
vector<int>edg[30010];
int ans[30010];
int top(int n)
{priority_queue<int, vector<int>, less<int> >q;for(int i = 1; i <= n; i++)if(deg[i] == 0/* && edg[i].size() > 0*/)q.push(i);int cnt = 0;while(!q.empty()){int nw = q.top();q.pop();for(auto i: edg[nw]){deg[i]--;if(deg[i] == 0)q.push(i);}ans[cnt++] = nw;}/*for(int i = 1; i <= n; i++)if(deg[i] == 0) ans[cnt++] = i;*/return cnt;
}int main()
{int T;cin >> T;while(T--){int n, m;scanf("%d%d", &n, &m);for(int i = 0; i <= n; i++)edg[i].clear();MMF(deg);for(int i = 0; i < m; i++){int x, y;scanf("%d%d", &x, &y);int size = edg[y].size();edg[y].emplace_back(x);if(size != edg[y].size())deg[x]++;}int cnt = top(n);for(int i = cnt - 1; i >= 0; i--)printf("%d%s", ans[i], i==0?"\n":" ");}return 0;
}
转载于:https://www.cnblogs.com/Yumesenya/p/7612740.html
HDU 4857 拓扑排序 优先队列相关推荐
- P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】
正题 题目链接:https://www.luogu.com.cn/problem/P3243 题目大意 nnn个数,有mmm个要求形如xxx在yyy的前面,现在要求在i−1i-1i−1尽量靠前的情况下 ...
- HDU1285确定比赛名次(拓扑排序+优先队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1285 思路 每场比赛的结果我们可以看成一个有向图,从胜利的一方指向失败的一方,在这个有向图的入度为0的 ...
- hdu1285 拓扑排序+优先队列
原题地址 这算是我个人AC的第一个拓扑排序题目吧. 题目解读 给出几组比赛的胜负情况.推断最后的排名.依据题意这就是一个明显的拓扑排序问题了. 注意 假设由于可能的排名有多种情况,这时要保证编号小的在 ...
- zcmu-2153(拓扑排序+优先队列)
2153: D.ly的排队问题 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 35 Solved: 13 [Submit][Status][Web ...
- GYM 100792k King's Rout (拓扑排序+优先队列)
题目: K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard ...
- hdu 1811(拓扑排序+并查集)
解题思路: 拓扑排序的两个性质: ①如果一次入队入度为零的点大于1则说明拓扑排序序列不唯一 ②如果排序的总个数小于给定的个数,则说明存在回路 可以先把"="的两个数用并查集放在一个 ...
- HDU Problem 4857 逃生【拓扑排序+优先队列】
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 5811 (拓扑排序 LIS)
题目链接:点击这里 题意:给定n个人之间的强壮关系(没有传递性),分成两个组,首先判断每一组是否能够通过某种排列使得前面的人都比后面的人强壮.如果可以,最多能从2组中选几个人到1组使得1组通过排列仍然 ...
- HDU 2647 拓扑排序
题意:每个人的工资至少888,然后有m个条件,前者比后者要多.求最少工资. 分析: 最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了.比较麻烦. 正确方式 ...
最新文章
- 2.lombok系列2:lombok注解详解
- python软件怎么用-python软件怎么用
- 【每周CV论文】深度学习图像降噪应该从阅读哪些文章开始
- 实现一个基于 IConfiguration 的低配版 FeatureFlag
- [Java基础]Arrays的常用方法
- 微内核和宏内核的区别_8086微处理器中的过程和宏之间的区别
- NA-NP-IE系列实验28:HDLC 和PPP 封装
- mysql的sql执行过程和explain语句
- 护理在计算机的应用研究,计算机虚拟和模拟技术在护理实践教学中应用的研究...
- Servlet(2)
- 搜索引擎设计实用教程(1)-以百度为例 之一:查询处理以及分词技术
- 用latex生成pdf文件后,文本复制粘贴显示乱码
- 动听百年:音乐播放器发展沉浮史
- 北京明年拟新增3万个幼儿园学位 并再筹建6万套政策性产权房
- 华为Datacom认证和Routing Switching认证并行多久?
- 让你的网页文本框增加光晕效果与提示,水印(类似QQ2011)
- 由浅入深玩转华为WLAN—12安全认证配置(5)Portal认证,外置Protal服务器TSM对接(网页认证)
- 智能头盔 Livall携全球首款智能骑行头盔亮相CES
- 升级glibc-2.12到glibc-2.15的正确方式
- 秒杀全网!研发、运营必备实用工具网站