CF-825E Minimal Labels 反向拓扑排序
http://codeforces.com/contest/825/problem/E
一道裸的拓扑排序题。为什么需要反向拓扑排序呢?因为一条大下标指向小下标的边可能会导致小下标更晚分配到号码,导致字典序增大。而反向拓扑排序在上述情况,只会使大序号更晚分配到序号,而小序号还是较小的,根据字典序比对规则,当然是选择反向拓扑排序啦。
#include <iostream>
#include <queue>
#include <cstdio>
#include <vector>
#define N 200005
using namespace std;
int n, m, sum, cnt, flag;
int deg[N];
int head[N];
struct Node
{
int v, next;
};
struct cmp
{
bool operator()(int a, int b)
{
return a<b;
}
};
int k;
int ans[N];
Node edge[N << ];
void print(int num)
{
ans[num] = k--;
}
void topoSort(int n)
{
priority_queue<int, vector<int>, cmp> q;
for (int i = ; i <= n; i++)
if (deg[i] == )
q.push(i), deg[i]--;
//cout << q.size() << endl;
while (!q.empty())
{
int u = q.top();
q.pop(), print(u);
sum--;
for (int i = head[u]; i != -; i = edge[i].next)
{
Node e = edge[i];
deg[e.v]--;
if (deg[e.v] == ) q.push(e.v), deg[e.v]--; }
}
}
void ini()
{
for (int i = ; i <= n; i++)
deg[i] = , head[i] = -, flag = ;
cnt = , sum = n;
}
void add(int u, int v)
{
swap(u, v);
deg[v]++;
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
int main(int argc, const char * argv[]) {
while (scanf("%d%d", &n, &m) != EOF)
{
k = n;
int a, b;
ini();
for (int i = ; i<m; i++)
scanf("%d%d", &a, &b), add(a, b);
topoSort(n);
for (int i = ; i <= n; i++)
printf("%d ", ans[i]);
puts("");
}
return ;
}
CF-825E Minimal Labels 反向拓扑排序的更多相关文章
- Codeforces 825E - Minimal Labels
825E - Minimal Labels 题意 给出 m 条有向边,组成有向无环图,输出一个 1 到 n 组成的排列,每个数只能出现一次,表示每个点的标号.如果有边 \((u, v)\) 那么 \( ...
- 逃生(HDU4857 + 反向拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 题面是中文题面,就不解释题意了,自己点击链接去看下啦~这题排序有两个条件,一个是按给定的那个序列 ...
- HDU-4857-逃生-反向拓扑排序+优先队列
HDU-4857 题意就是做一个符合条件的排序,用到拓扑序列. 我一开始wa了多发,才发现有几个样例过不了,发现1->2->3...的顺序无法保证. 后来就想用并查集强连,还是wa: 后来 ...
- 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)
确定比赛名次 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- 【HDOJ4857】【反向拓扑排序】
http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- POJ3687 反向拓扑排序
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16032 Accepted: 4713 D ...
- HDU 2647 Reward【反向拓扑排序】
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 4857(好题,反向拓扑排序)
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- HDU 4857 逃生 (反向拓扑排序 & 容器实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others) Mem ...
随机推荐
- Restful framework【第二篇】APIView
安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面安装 方式三:pycharm命令行下安装(装在当前 ...
- 关于linux下自定义的 alias文件和自定义函数库的通用写法(只适合自己的)
使用alias和自定义的function的必要性和重要性就不说了 , 自己的通用做法是: 可以创建: ~/bin/my.alias 文件 作为自定义的 alias专门文件 创建: ~/libsh/my ...
- P2596 [ZJOI2006]书架
思路 一开始写fhq-treap 感觉越写越感觉splay好些,就去splay 然后维护序列 注意前驱后继的不存在的情况 但不用插入虚拟节点(那插入岂不太麻烦) 跑的真慢的一批,splay太多了 错误 ...
- 【Finchley】【升级变更】Spring Cloud 升级到Finchley版本后需要注意的地方
Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...
- (zhuan) Variational Autoencoder: Intuition and Implementation
Agustinus Kristiadi's Blog TECH BLOG TRAVEL BLOG PORTFOLIO CONTACT ABOUT Variational Autoencoder: In ...
- 挺不错的Java自学网站
挺不错的Java自学网站 http://how2j.cn?p=29369
- Hadoop技术内幕1——源代码环境准备
Hadoop核心 1.HDFS:高容错性.高伸缩性……,允许用户将Hadoop部署在廉价的硬件上,构建分布式系统 2.MapReduce:分布式计算框架,允许用户在不了解分布式系统底层细节的情况下,开 ...
- Xilinx_ISE 14.7 Win10 闪退
打开D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64 将libPortabilityNOSH.dll 重命名为libPortability.dll,替换原libPortabilit ...
- [osg]节点遍历nodevisitor浅析
参考:https://www.cnblogs.com/hzhg/archive/2010/12/17/1908764.html OSG中节点的访问使用的是一种访问器模式.一个典型的访问器涉及抽象访问者 ...
- [html]自定义滚动条风格
webkit: <style type="text/css"> *{ margin: 0; padding: 0; } ::-webkit-scrollbar { wi ...