• hdoj-1285-确定比赛名次(拓扑排序)


    题目链接

     1 /*
     2     Name:hdoj-1285-确定比赛名次
     3     Copyright:
     4     Author:
     5     Date: 2018/4/11 15:59:18
     6     Description:
     7         标准的拓扑排序模板题,注意要优先小号输出 
     8 */
     9 #include <iostream>
    10 #include <queue>
    11 #include <vector>
    12 #include <cstring>
    13 #include <algorithm>
    14 using namespace std;
    15 const int MAXN = 1e+5;
    16 int du[MAXN], n , m, L[MAXN];
    17 vector<int>  g[MAXN];
    18 int topsort() {
    19     memset(du, 0, sizeof(du));
    20     for (int i=0; i<n; i++) {
    21         for (int j=0; j<g[i].size(); j++) {
    22             du[g[i][j]]++; 
    23         }
    24     }
    25     int tot = 0;
    26     priority_queue<int, vector<int>, greater<int>> Q;
    27     for (int i=0; i<n; i++) {
    28         if (!du[i]) {
    29             Q.push(i);
    30         }
    31     }
    32     while (!Q.empty()) {
    33         int x = Q.top();
    34         Q.pop();
    35         L[tot++] = x;
    36         for (int j=0; j<g[x].size(); j++) {
    37             int t = g[x][j];
    38             du[t]--;
    39             if (!du[t]) {
    40                 Q.push(t);
    41             }
    42         } 
    43     }
    44     if (tot == n) return 1;
    45     return 0;
    46 } 
    47 int main()
    48 {
    49 //    freopen("in.txt", "r", stdin);
    50     while (cin>>n>>m) {
    51         memset(L, 0, sizeof(L));
    52         memset(g, 0, sizeof(g));
    53         for (int i=0; i<m; i++) {
    54             int a, b;
    55             cin>>a>>b;
    56             a--;
    57             b--;
    58             if (find(g[a].begin(), g[a].end(), b) != g[a].end()) continue;
    59             g[a].push_back(b);
    60         }
    61         if (topsort() == 1) {
    62             cout<<L[0]+1 ;
    63             for (int i=1; i<n; i++) {
    64                 cout<<" "<<L[i]+1;
    65             }
    66         }
    67         cout<<endl;
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    LinkedHashMap、HashMap和TreeMap的比较使用
    RocketMQ之Namesrv
    mysql创建、删除、查看索引
    java8 JVM堆内存(heap) 新生代 老年代 元空间垃圾回收详解
    Java中GCRoots包括哪些
    单例模式双重校验锁
    内存屏障
    LockSupport的用法及原理
    HashSet,TreeSet和LinkedHashSet的区别
    Windows常用网络命令技巧汇总
  • 原文地址:https://www.cnblogs.com/slothrbk/p/8796584.html
Copyright © 2020-2023  润新知