zoukankan      html  css  js  c++  java
  • 【HDOJ】4857 逃生

    很容易想到优先队列+拓扑排序。关键点是有限制条件者有限,无限制条件者在最后,条件相同者按序输出。因此采用逆序。

     1 #include <iostream>
     2 #include <queue>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <cstring>
     6 using namespace std;
     7 
     8 #define MAXN 30005
     9 
    10 typedef struct {
    11     int to, next;
    12 } edge_st;
    13 
    14 edge_st edges[100005];
    15 int adj[MAXN], L;
    16 int deg[MAXN];
    17 int buf[MAXN];
    18 
    19 typedef struct node_st{
    20     int i;
    21     node_st() {}
    22     node_st(int ii) {
    23         i = ii;
    24     }
    25     friend bool operator <(node_st a, node_st b) {
    26         return a.i < b.i;
    27     }
    28 } node_st;
    29 
    30 void add(int u, int v) {
    31     edges[L].to = v;
    32     edges[L].next = adj[u];
    33     adj[u] = L++;
    34     ++deg[v];
    35 }
    36 
    37 void init() {
    38     L = 1;
    39     memset(deg, 0, sizeof(deg));
    40     memset(adj, 0, sizeof(adj));
    41 }
    42 
    43 int main() {
    44     int T, n, m;
    45     int i, j, k;
    46     node_st nd;
    47 
    48     scanf("%d", &T);
    49     while (T--) {
    50         scanf("%d%d", &n, &m);
    51         init();
    52         while (m--) {
    53             scanf("%d %d", &j, &k);
    54             add(k, j);
    55         }
    56         priority_queue<node_st> Q;
    57         for (i=1; i<=n; ++i)
    58             if (deg[i] == 0)
    59                 Q.push(node_st(i));
    60         k = 0;
    61         while (!Q.empty()) {
    62             nd = Q.top();
    63             buf[k++] = nd.i;
    64             Q.pop();
    65             for (i=adj[nd.i]; i; i=edges[i].next) {
    66                 deg[edges[i].to]--;
    67                 if (deg[edges[i].to] == 0)
    68                     Q.push(node_st(edges[i].to));
    69             }
    70         }
    71         for (i=k-1; i>=0; --i)
    72             if (i)
    73                 printf("%d ", buf[i]);
    74             else
    75                 printf("%d
    ", buf[i]);
    76     }
    77 
    78     return 0;
    79 }
  • 相关阅读:
    Linux学习-网络管理
    Linux学习-文件权限
    Linux学习-用户管理常用命令
    python操作数据库(MySQL、redis、MD5加密函数)
    Jenkins待过的坑
    Robot framework+Jenkins
    jenkins + maven + SVN自动化集成部署
    接口测试学习笔记二
    接口测试学习笔记一
    【数据结构】为什么要使用一致性哈希算法?
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3974458.html
Copyright © 2011-2022 走看看