zoukankan      html  css  js  c++  java
  • 传递 hdu 5961 拓扑排序有无环~

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961

    题目为中文,这里就不描述题意了。

    思路:

    从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分为两个图P、Q,但是它们是有内在联系的,即:P+Q,抛去方向即为完全图。

    题目都是中文,这里就不翻译了。我们可以从题目中知道,如果P、Q均满足传递性,那么P与(Q的反向图)生成的有向图应该无环。

    所以,简单一个拓扑排序检查是否有环即可,P、Q合为一张图,跑一遍,这个还是很快的。

    时长:3432MS

    代码如下:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <queue>
     4 #include <vector>
     5 using namespace std;
     6 vector<int> edge[2017];
     7 queue<int> Q;
     8 int m, n, inDegree[2017];
     9 
    10 int main() 
    11 {
    12     scanf("%d
    ", &n);
    13     while (n--)
    14     {
    15         scanf("%d
    ", &m);
    16         memset(inDegree, 0, sizeof inDegree);
    17         for (int i = 1; i<=m; i++)     edge[i].clear();
    18         while (!Q.empty())     Q.pop();
    19 
    20         for (int i = 1; i <= m; ++i)
    21             for (int j = 1; j <= m; ++j)
    22             {
    23                 char ch; 
    24                 cin >> ch;
    25                 if (ch == 'P')
    26                     inDegree[j]++, edge[i].push_back(j);
    27                 if (ch == 'Q')
    28                     inDegree[i]++, edge[j].push_back(i);
    29             }
    30         for (int i = 1; i<=m; i++) 
    31             if (!inDegree[i]) 
    32                 Q.push(i);
    33         int cnt = 0, newP;
    34         while (!Q.empty()) {
    35             newP = Q.front(), Q.pop();
    36             cnt++;
    37             for (int i = 0; i<edge[newP].size(); i++) {
    38                 inDegree[edge[newP][i]]--;
    39                 if (inDegree[edge[newP][i]] == 0) 
    40                     Q.push(edge[newP][i]);
    41             }
    42         }
    43         if (cnt == m) printf("T
    ");
    44         else printf("N
    ");
    45     }
    46 }

    感谢您的阅读,生活愉快~

  • 相关阅读:
    在Ubuntu下安装软件
    HIVE Thrift Server使用总结
    用Wubi来安装Ubuntu 12
    linux命令总结
    Linux Sed简介
    Linux批量重命名文件
    算法学习的轨迹(转)
    写入es速率优化
    走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar)
    走近Flex组件系列(二):简单实用的Alert组件
  • 原文地址:https://www.cnblogs.com/lv-anchoret/p/8486274.html
Copyright © 2011-2022 走看看