zoukankan      html  css  js  c++  java
  • hdu 3342 Legal or Not(拓扑排序) HDOJ Monthly Contest – 2010.03.06

    一道极其水的拓扑排序……但是我还是要把它发出来,原因很简单,连错12次……

    题意也很裸,前面的废话不用看,直接看输入

    输入n, m表示从0到n-1共n个人,有m组关系

    截下来m组,每组输入a, b表示a指向b,或者b指向a也行。

    输入n == 0时结束

    如果可以拓扑排序,输出"YES",否则输出"NO"。每组输出占一行。

    给两种代码吧,一种用邻接矩阵,另一种我也不知道叫什么好……

    邻接矩阵——

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 #include <queue>
     6 using namespace std;
     7 
     8 const int N = 110;
     9 
    10 int mp[N][N];
    11 int n, m;
    12 int a, b;
    13 int dg[N];
    14 
    15 int main()
    16 {
    17     //freopen("test.txt", "r", stdin);
    18     while(~scanf("%d%d", &n, &m) && n)
    19     {
    20         memset(dg, 0, sizeof(dg));
    21         memset(mp, 0, sizeof(mp));
    22         for(int i = 0; i < m; i++)
    23         {
    24             scanf("%d%d", &a, &b);
    25             if(mp[a][b] == 0 && a != b)
    26             {
    27                 dg[b]++;
    28                 mp[a][b] = 1;
    29             }
    30         }
    31 
    32         queue<int> que;
    33         for(int i = 0; i < n; i++)
    34         {
    35             if(!dg[i]) que.push(i);
    36         }
    37 
    38         int sum = 0;
    39         while(!que.empty())
    40         {
    41             int p = que.front();
    42             que.pop();
    43             sum++;
    44             dg[p]--;
    45             for(int i = 0; i < n; i++)
    46             {
    47                 if(mp[p][i])
    48                 {
    49                     dg[i]--;
    50                     if(!dg[i])
    51                     {
    52                         que.push(i);
    53                     }
    54                 }
    55 
    56             }
    57         }
    58         if(sum == n) printf("YES
    ");
    59         else printf("NO
    ");
    60 
    61     }
    62     return 0;
    63 }

    不知名——

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 #include <queue>
     6 using namespace std;
     7 
     8 const int N = 110;
     9 
    10 struct Node
    11 {
    12     int to;
    13     int next;
    14 }node[N];
    15 
    16 int head[N];
    17 int dg[N];
    18 int n, m;
    19 int a, b;
    20 
    21 int main()
    22 {
    23     //freopen("test.txt", "r", stdin);
    24     while(~scanf("%d%d", &n, &m) && n)
    25     {
    26         memset(head, -1, sizeof(head));
    27         memset(dg, 0, sizeof(dg));
    28         for(int i = 0; i < m; i++)
    29         {
    30             scanf("%d%d", &a, &b);
    31             node[i].to = b;
    32             node[i].next = head[a];
    33             head[a] = i;
    34             dg[b]++;
    35         }
    36 
    37         int sum = 0;
    38         queue<int>que;
    39         for(int i = 0; i < n; i++)
    40         {
    41             if(!dg[i])
    42             {
    43                 que.push(i);
    44             }
    45         }
    46 
    47         while(!que.empty())
    48         {
    49             int p = que.front();
    50             que.pop();
    51             dg[p]--;
    52             sum++;
    53             for(int i = head[p]; i != -1; i = node[i].next)
    54             {
    55                 int v = node[i].to;
    56                 dg[v]--;
    57                 if(!dg[v])
    58                 {
    59                     que.push(v);
    60                 }
    61             }
    62         }
    63         if(sum == n) printf("YES
    ");
    64         else printf("NO
    ");
    65     }
    66     return 0;
    67 }

     知道名字了,叫前向星标……

  • 相关阅读:
    HIFU控制器的显示板
    风扇控制板
    直流源控制板
    HIFU的心脏
    强劲的全桥驱动
    脑电模块
    另一个12导联心电模块
    数据处理,pandas方面遇到的问题
    6.13 django
    python 零基础学习之路-06 常用模块
  • 原文地址:https://www.cnblogs.com/mypride/p/4480695.html
Copyright © 2011-2022 走看看