博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ4010】菜肴制作
阅读量:5080 次
发布时间:2019-06-12

本文共 1761 字,大约阅读时间需要 5 分钟。

题目链接:


 

一种比较容易想到的做法是把进行拓扑排序的队列换成优先队列,每次取出能访问到的编号最小的点,但这样是不对的,很容易构造数据卡掉。

正确的做法是建反向图,每次取出编号最大的,再将生成的拓扑序逆序输出即可。

第一种做法并不能保证小的编号尽量靠前,因为每次取的当前能访问到的最小的;第二种方法,相当于尽量先把编号较大的取走,实在不能取了才去取编号小的,因此逆序以后就是要求的序列。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 inline int get_num() {10 int num = 0;11 char c = getchar();12 while (c < '0' || c > '9') c = getchar();13 while (c >= '0' && c <= '9')14 num = num * 10 + c - '0', c = getchar();15 return num;16 }17 18 const int mmax = 1e5 + 5;19 20 int head[mmax], eid;21 22 struct Edge {23 int v, next;24 } edge[mmax];25 26 inline void insert(int u, int v) {27 edge[++eid].v = v;28 edge[eid].next = head[u];29 head[u] = eid;30 }31 32 int ind[mmax];33 34 priority_queue
q;35 stack
ans;36 37 int main() {38 int d = get_num();39 while (d--) {40 int n = get_num(), m =get_num();41 memset(head, 0, sizeof(head));42 memset(ind, 0, sizeof(ind));43 eid = 0;44 for (int i = 1; i <= m; ++i) {45 int u = get_num(), v = get_num();46 insert(v, u);47 ++ind[u];48 }49 for (int i = 1; i <= n; ++i)50 if (!ind[i]) q.push(i);51 while (!q.empty()) {52 int u = q.top();53 q.pop();54 ans.push(u);55 for (int p = head[u]; p; p = edge[p].next) {56 int v = edge[p].v;57 if (!(--ind[v])) q.push(v);58 }59 }60 if ((int)ans.size() != n) {61 printf("Impossible!\n");62 while (!ans.empty()) ans.pop();63 } else {64 while (!ans.empty()) {65 printf("%d ", ans.top());66 ans.pop();67 }68 printf("\n");69 }70 }71 return 0;72 }
AC代码

 

转载于:https://www.cnblogs.com/Mr94Kevin/p/9908971.html

你可能感兴趣的文章
bzoj1878
查看>>
【Vegas原创】Mysql绿色版安装方法
查看>>
Thrift Expected protocol id ffffff82 but got 0
查看>>
分享《去哪儿网》前端笔试题
查看>>
2013-07-04学习笔记二
查看>>
CP15 协处理器寄存器解读
查看>>
【codeforces 787B】Not Afraid
查看>>
【9111】高精度除法(高精度除高精度)
查看>>
【hihocoder 1312】搜索三·启发式搜索(普通广搜做法)
查看>>
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>
bzoj1648:奶牛野餐
查看>>
springboot-web进阶(四)——单元测试
查看>>
没有清晰的职业规划,跳槽会很失败
查看>>