• sdut 2819 比赛排名(边表 拓扑排序)


    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2819

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 using namespace std;
     7 const int maxn = 800+10;
     8 int t, head[maxn], cnt[maxn], a[maxn];
     9 
    10 struct node
    11 {
    12     int u, v, next;
    13 } g[maxn];
    14 void init()
    15 {
    16     t = 0;
    17     memset(head, -1, sizeof(head));
    18     memset(cnt, 0, sizeof(cnt));
    19 }
    20 void add(int u, int v)
    21 {
    22     g[t].u = u;
    23     g[t].v = v;
    24     g[t].next = head[u];
    25     head[u] = t;
    26     t++;
    27 }
    28 void topo(int u)
    29 {
    30     int i;
    31     for(i = head[u]; i != -1; i = g[i].next)
    32     cnt[g[i].v]--;
    33 }
    34 int main()
    35 {
    36     int n, m, p1, p2, f;
    37     int i, j, x;
    38     while(~scanf("%d%d", &n, &m))
    39     {
    40         f = 0;
    41         x = 1;
    42         init();
    43         while(m--)
    44         {
    45             scanf("%d%d", &p1, &p2);
    46             add(p1, p2);  //有向边
    47             cnt[p2]++;
    48         }
    49         for(i = 1; i <= n; i++)
    50         {
    51             for(j = 1; j <= n; j++)
    52             {
    53                 if(cnt[j]==0)
    54                 {
    55                     cnt[j] = -1;
    56                     a[x++] = j;
    57                     topo(j);  //拓扑排序,去掉入度
    58                     break;
    59                 }
    60             }
    61             if(j == n+1)  //如果没有入度为0的,说明不符合条件
    62             {
    63                 f = 1;
    64                 break;
    65             }
    66         }
    67         if(f)
    68             printf("-1
    ");
    69         else
    70         {
    71             for(i = 1; i <= n; i++)
    72                 if(i==n)
    73                     printf("%d
    ", a[i]);
    74                 else
    75                     printf("%d ", a[i]);
    76         }
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    企业级应用框架设计备忘录
    DBHelper
    Oracle客户端精简绿色版 不安装oracle客户端 转载
    回车转TAB
    excel列显示列号 转载
    XtraTreeList Drag Event
    XmlSerializer vs DataContractSerializer: Serialization in Wcf 转载
    转载 在Windows64位环境下.net访问Oracle解决方案
    正则表达式学习笔记
    SQL相关子查询的例子
  • 原文地址:https://www.cnblogs.com/bfshm/p/3581452.html
Copyright © 2020-2023  润新知