今天写了一个自己的随机跳题小程序,第一次试发现跳的全是不可做题,但是在周围我一眼看见了这个题,不能说一眼看出来,但是也是比较有思路,所以就做他了!

做得比较顺利,做完之后美滋滋,突然发现样例第三组过不了。。。然后发现自己算法有问题。。。GG,又想了一个超复杂的算法,刚开始写就放弃了,根本没法写。

于是看题解(本来以为自己能A),就看了一行就明白了,只要倒着存边再倒着输出就行了!!!QAQ!!

跳题代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const int INF = << ;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(), c < '' || c > '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(), c >= '' && c <= '')
x = x * + c - '';
if(op) x = -x;
}
template <class T>
void write(T x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar('' + x % );
}
int main()
{
int m,d;
time_t t;
read(m);read(d);
srand((unsigned int)time(NULL));
int f = m * d * rand() % ;
if(f > )
printf("%d\n",f);
else
printf("%d\n",f + );
return ;
}

题干:

Description

知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴。
ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予
1到N的顺序编号,预估质量最高的菜肴编号为1。由于菜肴之间口味搭配的问题,
某些菜肴必须在另一些菜肴之前制作,具体的,一共有 M 条形如“i 号菜肴‘必须’
先于 j 号菜肴制作”的限制,我们将这样的限制简写为<i,j>。现在,酒店希望能求
出一个最优的菜肴的制作顺序,使得小 A能尽量先吃到质量高的菜肴:也就是说,
()在满足所有限制的前提下, 号菜肴“尽量”优先制作;()在满足所有限制,
号菜肴“尽量”优先制作的前提下,2号菜肴“尽量”优先制作;()在满足所有限
制,1号和2号菜肴“尽量”优先的前提下,3号菜肴“尽量”优先制作;()在满
足所有限制, 号和 号和 号菜肴“尽量”优先的前提下, 号菜肴“尽量”优
先制作;()以此类推。
例1:共4 道菜肴,两条限制<,>、<,>,那么制作顺序是 ,,,。例2:共
5道菜肴,两条限制<,>、 <,>,那么制作顺序是 ,,,,。例1里,首先考虑 ,
因为有限制<,>和<,>,所以只有制作完 和 后才能制作 ,而根据(), 号
又应“尽量”比 号优先,所以当前可确定前三道菜的制作顺序是 ,,;接下来
考虑2,确定最终的制作顺序是 ,,,。例 2里,首先制作 1是不违背限制的;接
下来考虑 时有<,>的限制,所以接下来先制作 再制作 ;接下来考虑 时有
<,>的限制,所以接下来先制作 4再制作 ,从而最终的顺序是 ,,,,。
现在你需要求出这个最优的菜肴制作顺序。无解输出“Impossible!” (不含引号,
首字母大写,其余字母小写)
Input 第一行是一个正整数D,表示数据组数。
接下来是D组数据。
对于每组数据:
第一行两个用空格分开的正整数N和M,分别表示菜肴数目和制作顺序限
制的条目数。
接下来M行,每行两个正整数x,y,表示“x号菜肴必须先于y号菜肴制作”
的限制。(注意:M条限制中可能存在完全相同的限制)
Output 输出文件仅包含 D 行,每行 N 个整数,表示最优的菜肴制作顺序,或
者”Impossible!”表示无解(不含引号)。
Sample Input Sample Output Impossible!

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const int INF = << ;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(), c < '' || c > '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(), c >= '' && c <= '')
x = x * + c - '';
if(op) x = -x;
}
template <class T>
void write(T x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar('' + x % );
}
int len = ,ru[],chu[],lst[];
int n,m,k,x,y,w,ans[],num = ;
priority_queue <int> qu;
//vector <int> ve[100010];
bool vis[];
struct node
{
int l,r,nxt;
}a[];
void add(int l,int r)
{
a[++len].l = l;
a[len].r = r;
a[len].nxt = lst[l];
lst[l] = len;
chu[l]++;
ru[r]++;
}
void clean_queue()
{
priority_queue <int> p;
swap(p,qu);
}
int ok = ,emm = ;
int main()
{
read(k);
while(k--)
{
clean(vis);
clean(lst);
clean(ru);
clean(chu);
clean(ans);
clean_queue();
len = ;
ok = ;
emm = ;
num = ;
read(n);read(m);
duke(i,,m)
{
read(x);read(y);
add(y,x);
}
duke(i,,n)
{
if(ru[i] == )
qu.push(i),emm = ;
}
if(emm != )
{
printf("Impossible!\n");
continue;
}
while(!qu.empty())
{
x = qu.top();
qu.pop();
vis[x] = ;
for(int p = lst[x];p;p = a[p].nxt)
{
int r = a[p].r;
ru[r]--;
if(ru[r] == )
qu.push(r);
}
ans[++num] = x;
}
if(ans[n] != )
{
lv(i,n,)
printf("%d ",ans[i]);
printf("\n");
}
else
{
printf("Impossible!\n");
continue;
}
}
return ;
}
/*
3
5 4
5 4
5 3
4 2
3 2
3 3
1 2
2 3
3 1
5 2
5 2
4 3
*/

B4010 菜肴制作 拓扑排序(附随机跳题代码)的更多相关文章

  1. 【bzoj4010】[HNOI2015]菜肴制作 拓扑排序+堆

    题目描述 给你一张有向图,问:编号-位置序(即每个编号的位置对应的序列)最小(例如1优先出现在前面,1位置相同的2优先出现在前面,以此类推)的拓扑序是什么? 输入 第一行是一个正整数D,表示数据组数. ...

  2. 【BZOJ4010】[HNOI2015]菜肴制作 拓扑排序

    [BZOJ4010][HNOI2015]菜肴制作 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高 ...

  3. BZOJ4010[HNOI2015]菜肴制作——拓扑排序+堆

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴 ...

  4. [LOJ2114][HNOI2015]-菜肴制作-拓扑排序+贪心

    <题面> 一个蒟蒻的痛苦一天 在今天的节目集训中,麦蒙将带领大家学习9种错误的解题策略 $15\%$算法(看两个就往下走吧) 1> puts("Impossible!&qu ...

  5. 【HNOI2015】菜肴制作 - 拓扑排序+贪心

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  6. bzoj 4010: [HNOI2015]菜肴制作 拓扑排序

    题目链接: 题目 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB 问题描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴 ...

  7. 洛谷P3243 [HNOI2015]菜肴制作 拓扑排序+贪心

    正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5, ...

  8. 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序

    题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...

  9. 【luoguP3243】[HNOI2015]菜肴制作--拓扑排序

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

随机推荐

  1. redis集群——RPLR简笔(Redis+PostgreSQL+Linux(centos7)+RabbitMQ)

    使用的是centos7. 1.下载最新redis源码,解压(2016-05-12最新版本为3.2.0,3.0及以上才有官方集群) 2.进入源码根目录(此目录下的redis-stable目录),找到ut ...

  2. SQL基本操作——GROUP BY

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 实例:我们拥有下面这个 "Orders" 表 O_Id OrderDate O ...

  3. 快速学习mybatis框架

    一.介绍Mybatis(主要从以下两点进行介绍) 1.MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动 ...

  4. Python之模块、正则

    一.模块import 模块的实质就是把要导入模块里面的代码,从上到下执行一遍,找模块的顺序是,先从当前目录下找,找不到的话,再环境变量里面找导入的模块名字最好不要有.,a.import sysprin ...

  5. mysqlconnector将EXCEL表数据导入数据库

    测试excel和脚本放在同一个目录 测试excel和脚本放在同一个目录 #!/usr/bin/env python #coding=utf-8 import xlrd import mysql.con ...

  6. centos设置ssh安全只允许用户从指定的IP登陆

    1.编辑文件 /etc/ssh/sshd_config vi /etc/ssh/sshd_config 2.root用户只允许在如下ip登录 AllowUsers root@203.212.4.117 ...

  7. 1.1 Java程序设计平台

    Java并不只是一种语言.在此之前出现的那么多中语言也没有能够引起那么大的轰动.Java是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供诸如安全性.跨操作系统的可移植性以及自动垃 ...

  8. BUPT2017 wintertraining(15) #9

    下面不再说明题意了请自行读题,直接放contest链接. https://vjudge.net/contest/151607 A.考虑当火车隔k站一停时 区间长度 >= k 的纪念品一定能买到 ...

  9. 暑假集训D21总结

    考试 今天考了一大圈 不可做 题 本来是爆零的,后来把数据改了一下,成功暴力骗了5分= = 刷题 无限水题$ing$,然后就$GG$了 生活 不开心$ing$,没有啥好写的 今天就是莫名的不开心 歌 ...

  10. springboot优雅的关闭应用

    使用actuator,通过发送http请求关闭 将应用注册为linux服务,通过service xxx stop关闭 具体这两种方式如何实现,这里就不说了,网上百度一堆,主要讲一下在这两种情况下web ...