码迷,mamicode.com
首页 > 编程语言 > 详细

传递 hdu 5961 拓扑排序有无环~

时间:2018-03-01 00:42:21      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:题意   并且   ble   pos   一个   拓扑   http   space   pid   

 

题目: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", &n);
13     while (n--)
14     {
15         scanf("%d\n", &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\n");
44         else printf("N\n");
45     }
46 }

 

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

传递 hdu 5961 拓扑排序有无环~

标签:题意   并且   ble   pos   一个   拓扑   http   space   pid   

原文地址:https://www.cnblogs.com/lv-anchoret/p/8486274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!