[BZOJ5280] [Usaco2018 Open]Milking Order
Description
Input
Output
Sample Input
3 1 2 3
2 4 2
3 3 4 1
Sample Output
这里,Farmer John有四头奶牛,他的挤奶顺序应该是奶牛1在奶牛2之前、奶牛2在奶牛3之前(第一个观察结果)
,奶牛4在奶牛2之前(第二个观察结果),奶牛3在奶牛4之前、奶牛4在奶牛1之前(第三个观察结果)。前两个观
察结果可以同时被满足,但是Farmer John不能同时满足所有的规则,因为这样的话会要求奶牛1在奶牛3之前,同
时奶牛3在奶牛1之前。这意味着总共有两种可能的挤奶顺序:1 4 2 3和4 1 2 3,第一种是字典序较小的。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#include <vector>
using namespace std;
#define reg register
inline int read() {
int res=;char ch=getchar();bool fu=;
while(!isdigit(ch)){if(ch=='-')fu=;ch=getchar();}
while(isdigit(ch))res=(res<<)+(res<<)+(ch^), ch=getchar();
return fu?-res:res;
} int n, m;
int s[];
vector <int> T[];
int deg[];
struct edge {
int nxt, to;
}ed[];
int head[], cnt;
inline void add(int x, int y) {
ed[++cnt] = (edge){head[x], y};
head[x] = cnt;
deg[y]++;
}
int rod[], Top;
inline bool Topsort(bool fl)
{
priority_queue <int, vector <int>, greater<int> > q;
for (reg int i = ; i <= n ; ++ i)
if (deg[i] == ) q.push(i);
while(!q.empty())
{
int x = q.top();q.pop();
if (fl) rod[++Top] = x;
for (reg int i = head[x] ; i ; i = ed[i].nxt)
{
int to = ed[i].to;
deg[to]--;
if (!deg[to]) q.push(to);
}
}
for (reg int i = ; i <= n ; ++ i)
if (deg[i]) return ;
return ;
} inline bool check(int mid, bool fl)
{
cnt = ;
memset(head, , sizeof head);
memset(deg, , sizeof deg);
for (reg int i = ; i <= mid ; ++ i)
{
for (reg int j = ; j < T[i].size() - ; ++ j)
{
int x = T[i][j], y = T[i][j+];
add(x, y);
}
}
if (fl) return Topsort(); return Topsort();
} int main()
{
n = read(), m = read();
for (reg int i = ; i <= m ; ++ i)
{
s[i] = read();
for (reg int j = ; j <= s[i] ; ++ j)
T[i].push_back(read());
}
int l = , r = m, ans = ;
while(l <= r)
{
int mid = l + r >> ;
if (check(mid, )) ans = mid, l = mid + ;
else r = mid - ;
}
check(ans, );
for (reg int i = ; i <= n ; ++ i) printf("%d ", rod[i]);
return ;
}
[BZOJ5280] [Usaco2018 Open]Milking Order的更多相关文章
- BZOJ5280: [Usaco2018 Open]Milking Order(二分+拓扑)
5280: [Usaco2018 Open]Milking Order Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 123 Solved: 62[ ...
- [Usaco2018 Open]Milking Order
Description Farmer John的N头奶牛(1≤N≤10^5),仍然编号为1-N,正好闲得发慌.因此,她们发展了一个与Farmer John每天早上为她们挤牛奶的时候的排队顺序相关的复杂 ...
- 【二分+拓扑排序】Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348
目录 Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 MEA ...
- Milking Order
Milking Order 题意:给出m个描述状态,其中包含若干个边的关系,问最多能取x (x<=m)个状态,使得形成的图没有环.就是说取x个状态,用状态中的关系建边,其中不能有环. 题解:最大 ...
- 【杂题1】USACO 2018 Open Contest-练习
https://www.xoj.red/contests/show/1231 下面会写一些题目的解析什么的,当然不会粘贴题目只是简单提一下 (部分题目简单的题目就不概括了) 其实难度应该前面比较低. ...
- codeforce ---A. Milking cows
A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY
正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade 随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...
- BZOJ 1391: [Ceoi2008]order [最小割]
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1509 Solved: 460[Submit][Statu ...
- Android中的Libraries以及Order and Export的使用。
1Add JAR 从Eclipse的现有所有工程中,添加jar包到该工程下 2Add External JARs 从Eclipse外的其他的位置,添加jar包到该工程下 3Add Variable 增 ...
随机推荐
- JAVA运行内部类的main方法
运行内部类的main方法 定义两个线程: 一个线程的名字"thread1",线程功能输出1~10的阶乘. 另一个线程的名字"thread2",线程功能输出线程的 ...
- jmeter 命令压测生成报告
1.本地复制到远程 scp -r local_folder remote_username@remote_ip:remote_folder 或者 scp -r local_folder remote_ ...
- 前端之JavaScript篇
一. 简介 javascript是一门动态弱类型的解释性编程语言, 增强页面动画效果,实现页面与用户之间实时动态的交互. JavaScript有三部分组成: ECMAscript, DOM, BOM ...
- 控制执行流程之switch语句
switch语句,同时也是一种选择性语句,其根据整数表达式的值(整数选择因子)选择一段代码去执行.整数选择因子为int类型或者char类型.
- Day3 目录结构及文件管理
Windows:以多根的方式组织文件C : D: E: F: linux:以单根的方式组织文件 / 2.存放命令相关的目录 /bin 普通用户的使用的命令 /bin /ls ,/bin/da ...
- 03.Django基础三之视图函数
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- [原创] 为Visio添加公式编辑器工具栏按钮
前言 作为理工科的学生,在写论文时,难免会在示意图中添加一些公式来说明研究内容.常用的画图工具就是 Visio .而常用的公式编辑器就是 Mathtype .对于 Word 这种软件,Mathtype ...
- [Advanced Python] 14 - "Generator": calculating prime
高性能编程 几个核心问题 • 生成器是怎样节约内存的?• 使用生成器的最佳时机是什么?• 我如何使用 itertools 来创建复杂的生成器工作流?• 延迟估值何时有益,何时无益? From: htt ...
- [Leetcode] 第318题 最大单词长度乘积
一.题目描述 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母.你可以认为每个单词只包含小写字母.如果不 ...
- python最基本的数据掌握
python初学者可能会对list数据类型和int或者是字符串数据类型比较迷茫 list是引用,是指向的一个内存地址, 变量不是引用的 啥也不说上解释: a = 1 b = a a = 2 prin ...