B4010 菜肴制作 拓扑排序(附随机跳题代码)
今天写了一个自己的随机跳题小程序,第一次试发现跳的全是不可做题,但是在周围我一眼看见了这个题,不能说一眼看出来,但是也是比较有思路,所以就做他了!
做得比较顺利,做完之后美滋滋,突然发现样例第三组过不了。。。然后发现自己算法有问题。。。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 菜肴制作 拓扑排序(附随机跳题代码)的更多相关文章
- 【bzoj4010】[HNOI2015]菜肴制作 拓扑排序+堆
题目描述 给你一张有向图,问:编号-位置序(即每个编号的位置对应的序列)最小(例如1优先出现在前面,1位置相同的2优先出现在前面,以此类推)的拓扑序是什么? 输入 第一行是一个正整数D,表示数据组数. ...
- 【BZOJ4010】[HNOI2015]菜肴制作 拓扑排序
[BZOJ4010][HNOI2015]菜肴制作 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高 ...
- BZOJ4010[HNOI2015]菜肴制作——拓扑排序+堆
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴 ...
- [LOJ2114][HNOI2015]-菜肴制作-拓扑排序+贪心
<题面> 一个蒟蒻的痛苦一天 在今天的节目集训中,麦蒙将带领大家学习9种错误的解题策略 $15\%$算法(看两个就往下走吧) 1> puts("Impossible!&qu ...
- 【HNOI2015】菜肴制作 - 拓扑排序+贪心
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...
- bzoj 4010: [HNOI2015]菜肴制作 拓扑排序
题目链接: 题目 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB 问题描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴 ...
- 洛谷P3243 [HNOI2015]菜肴制作 拓扑排序+贪心
正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5, ...
- 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序
题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...
- 【luoguP3243】[HNOI2015]菜肴制作--拓扑排序
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...
随机推荐
- jQuery——自定义动画
动画方法:animate(json,1000, function (){}) 参数说明:json代表属性设置,1000是动画时间,最后一个是回调函数,其中动画时间可选 属性支持:http://www. ...
- JS——设置cookie
cookie 用来识别用户. <html> <head> <script type="text/javascript"> function ge ...
- HDU_5734_数学推公式
题意:给一个向量W={w1,w2……,wn},和一个向量B,B的分量只能为1和-1.求||W-αB||²的最小值. 思路:一来一直在想距离的问题,想怎么改变每一维的值才能使这个向量的长度最小,最后无果 ...
- 字符串str
字符串: #字符串的索引从0开始的,如果倒数最后一位是-1,索引的位置是唯一的.var1 = var[0:2] #从第一个字符到第2个字符var2 = var[:] #从第一个到最后var3 = va ...
- Mysql 在Linux下的安装
1.获取mysql源码 wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49.tar.gz 3.添加mysql用户和用户组,创建 ...
- windows环境搭建ui自动化环境
windows环境安装python虚拟环境 https://www.cnblogs.com/suke99/p/5355894.html https://www.cnblogs.com/jiuyang/ ...
- CAD导出黑白色的pdf(com接口)
主要用到函数说明: IMxDrawModifyTheColor 接口 用来修改图面所有对象的颜色,把它的颜色都修改成一个指定的值. IMxDrawModifyTheColor::Do 修改颜色,详细说 ...
- EF-Linq
一丶基本语法(from a in Table where a.id="001" select a).Tolist(); 隐式内连接from a in table1 join b i ...
- uva340 Master-Mind Hints (UVA - 340)
题目简要 题目意思很简单每个测试都由原题目在第一行,然后后面的都是去猜的答案,如果猜测的位置正确那么输出的结果的数对里面的第一个数就加一,如果仅答案正确(原题目里有这个数,但是位置不一样)那么就在输出 ...
- copy the content of a file muliptle times and save as ordered files:
input: transient.case outputs: transient_1.case, transient_2.case,...transient_101.case ********** n ...