zoukankan      html  css  js  c++  java
  • HDU 4857 逃生 (优先队列+反向拓扑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857

    解题报告:有n个点,有m个条件限制,限制是像这样的,输入a  b,表示a必须排在b的前面,如果不能确定两个数谁排在前面则尽量把小的排在前面。

    首先把出度为0的点加入到优先队列中,然后每次用优先队列中弹出的点去更新其它点的出度,更新的同时如果又有其它点的出度为0的话又加到优先队列中,

    最后按照从优先队列中出队的反序输出就可以了。我还是不懂为什么按照入度为0然后加入到优先队列然后正序输出这样为什么不行。希望有懂的人可以告诉我。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<vector>
     7 using namespace std;
     8 const int maxn = 30000+5;
     9 
    10 priority_queue<int> que;
    11 vector<int> vt[maxn];
    12 int du[maxn],ans[maxn];
    13 int main()
    14 {
    15     int T,n,m;
    16     scanf("%d",&T);
    17     while(T--)
    18     {
    19         scanf("%d%d",&n,&m);
    20         int u,v;
    21         for(int i = 1;i <= n;++i)
    22         vt[i].clear();
    23         memset(du,0,sizeof(du));
    24         while(m--)
    25         {
    26             scanf("%d%d",&u,&v);
    27             du[u]++;
    28             vt[v].push_back(u);
    29         }
    30         for(int i = 1;i <= n;++i) //把出度为0的先加到优先队列中
    31         if(!du[i]) que.push(i);
    32         int f = n - 1;
    33         while(!que.empty())
    34         {
    35             int s = que.top();
    36             que.pop();
    37             ans[f--] = s;
    38             int len = vt[s].size();
    39             for(int i = 0;i < len;++i)
    40             {
    41                 int tt = vt[s][i];
    42                 du[tt]--;
    43                 if(du[tt] == 0) que.push(tt);
    44             }
    45         }
    46         for(int i = 0;i < n;++i)
    47         printf(i == 0? "%d":" %d",ans[i]);
    48         puts("");
    49     }
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3862988.html
Copyright © 2011-2022 走看看