Codeforces 825E - Minimal Labels
825E - Minimal Labels
题意
给出 m 条有向边,组成有向无环图,输出一个 1 到 n 组成的排列,每个数只能出现一次,表示每个点的标号。如果有边 \((u, v)\) 那么 \(label_u < label_v\) 。要求最后字典序尽可能小。
分析
拓扑排序的变形。
这题要统计的是每个点的出度,比如说某个点出度为 0 ,那么它的标号一定很大(因为它不需要比别的点小了),又要求字典序最小,对于初始图,那么出度为 0 的点且序号最大的点的标号一定为 n。优先队列维护下(最大值优先),如果某个点的标号确定了,那么删除所有连向这个点的边,更新出度。
code
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 10;
int n, m;
vector<int> rG[MAXN];
vector<int> topolist;
priority_queue<int, vector<int>, less<int> > Q;
int a[MAXN], c[MAXN];
int main() {
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++) {
int x, y;
scanf("%d%d", &x, &y);
c[x]++;
rG[y].push_back(x);
}
for(int i = 1; i <= n; i++) if(c[i] == 0) Q.push(i);
int N = n;
while(!Q.empty()) {
int x = Q.top(); Q.pop();
a[x] = N--;
for(int i = 0; i < rG[x].size(); i++) {
if(--c[rG[x][i]] == 0) Q.push(rG[x][i]);
}
}
for(int i = 1; i <= n; i++) {
printf("%d ", a[i]);
}
return 0;
}
Codeforces 825E - Minimal Labels的更多相关文章
- Codeforces 825E Minimal Labels - 拓扑排序 - 贪心
You are given a directed acyclic graph with n vertices and m edges. There are no self-loops or multi ...
- Educational Codeforces Round 25 E. Minimal Labels&&hdu1258
这两道题都需要用到拓扑排序,所以先介绍一下什么叫做拓扑排序. 这里说一下我是怎么理解的,拓扑排序实在DAG中进行的,根据图中的有向边的方向决定大小关系,具体可以下面的题目中理解其含义 Educatio ...
- Educational Codeforces Round 25 E. Minimal Labels 拓扑排序+逆向建图
E. Minimal Labels time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Minimal Labels
Minimal Labels 这个题需要用到拓扑排序的思维,但是这个题还有一个条件--字典序最小,因此可以用一个递增的优先队列来维护,每找到一个入度为 0 的点就把它 push 进去因而每一次判断的点 ...
- Codeforces 797C - Minimal string
C. Minimal string 题目链接:http://codeforces.com/problemset/problem/797/C time limit per test 1 second m ...
- CodeForces 797C Minimal string:贪心+模拟
题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...
- Codeforces 1092E Minimal Diameter Forest
Minimal Diameter Forest 首先我们找出每个连通块中的特殊点, 特殊点的定义是到各种个连通块中距离的最大值最小的点, 每个连通块肯定通过特殊点连到其他连通块, 我们把有最大值的特殊 ...
- CF-825E Minimal Labels 反向拓扑排序
http://codeforces.com/contest/825/problem/E 一道裸的拓扑排序题.为什么需要反向拓扑排序呢?因为一条大下标指向小下标的边可能会导致小下标更晚分配到号码,导致字 ...
- 解题:CF825E Minimal Labels
题面 看起来似乎是个水水的拓扑排序+堆,然而并不对,因为BFS拓扑排序的话每次只会在“当前”的点中排出一个最小/大的字典序,而我们是要一个确定的点的字典序尽量小.正确的做法是反向建图,之后跑一个字典序 ...
随机推荐
- 《Cracking the Coding Interview》——第11章:排序和搜索——题目1
2014-03-21 20:35 题目:给定已升序排列的数组A和数组B,如果A有足够的额外空间容纳A和B,请讲B数组合入到A中. 解法:由后往前进行归并. 代码: // 11.1 Given two ...
- jmeter之录制控制器与代理的使用
1. 先启动jmeter,在测试计划中添加线程组 2. 选中线程组右键添加,在配置元件中点击HTTP请求默认值 3. 选中线程组右键添加,在逻辑控制器中点击录制控制 ...
- 使用selenium监听每一步操作
1.创建类LogEventListener.java, 如下: package com.demo; import org.openqa.selenium.By; import org.openqa.s ...
- wxPython 安装 及参考文档
三种操作平台上的安装方法 1.windows 和 mac pip install -U wxPython 2.linux pip install -U -f https://extras.wxpyth ...
- 网络--路由表&IP选路
路由表的 flags 字段显示路由状态: A 活动的休眠网关检测在路由上被启用.本字段只适用于 AIX 5.1 或更新版本. U :Up. H :路由至主机而不是网络. G :路由至网关. 不带G表示 ...
- Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering
11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...
- Alpha 冲刺(5/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成了主界面的基本布局 ...
- 201621123033 《Java程序设计》第2周学习总结
1. 本周学习总结 ·学习了String类的特点,以及其与字符数组的关系等等. ·常量池的相关概念. ·包装类的特点. 2. 书面作业 1. String-使用Eclipse关联jdk源代码 1.1 ...
- Javascript 基础总结
一.预处理 console.log(global); // undefined var global = 'global'; console.log(global); // global functi ...
- Python中的单元测试模块Unittest快速入门
前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...