题目

我们称一个有向图G是 传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c。

我们称图G是一个 竞赛图,当且仅当它是一个有向图且它的基图是完全图。换句 话说,将完全图每条边定向将得到一个竞赛图。

下图展示的是一个有4个顶点的竞赛图。

现在,给你两个有向图\(P=(V,E_p)\)和\(Q = (V,E_e)\),满足:

  1. \(E_P\)与E_$e没有公共边;
  2. \((V,E_p \cup E+e)\)是一个竞赛图。

    你的任务是:判定是否\(P,Q\)同时为传递的。

输入格式

包含至多20组测试数据。

第一行有一个正整数,表示数据的组数。

对于每组数据,第一行有一个正整数n。接下来n行,每行为连续的n个字符,每 个字符只可能是’-’,’P’,’Q’中的一种。

  • 如果第i行的第j个字符为’P’,表示有向图P中有一条边从i到j;
  • 如果第i行的第j个字符为’Q’,表示有向图Q中有一条边从i到j;
  • 否则表示两个图中均没有边从i到j。

    保证\(1 <= n <= 2016\),一个测试点中的多组数据中的n的和不超过16000。保证输入的图一定满足给出的限制条件。

输出格式

对每个数据,你需要输出一行。如果P! Q都是传递的,那么请输出’T’。否则, 请输出’N’ (均不包括引号)。

输入样例

4
4
-PPP
--PQ
---Q
----
4
-P-P
--PQ
P--Q
----
4
-PPP
--QQ
----
--Q-
4
-PPP
--PQ
----
--Q-

输出样例

T
N
T
N

题解

样例图

注:在样例2中,P不是传递的。在样例4中,Q不是传递的。

假设\(1->2,2->3\)有边, 但\(1->3\)无边, 就不是传递的, 那么什么情况下\(1->3\)无边呢, 一种情况是\(3->1\)有边, 另一种情况是另一个图在\(1,3\)之间有边

第一种情况, \(1->2,2->3,3->1\), 这显然是一个环

第二种情况, 当另一张图有\(3->1\), 拼起来就构成一个环;当另一张图有\(1->3\), 每条边反向拼起来也是一个环

所以使用拓扑排序找环即可。

代码

#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
std::vector<int> edge[2017];
std::queue<int> Q;
int m, n, in[2017], cnt, newn;
int main() {
scanf("%d", &n);
while (n--) {
scanf("%d", &m);
memset(in, 0, sizeof(in));
for (int i = 1; i <= m; i++) edge[i].clear();
while (!Q.empty()) Q.pop();
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= m; ++j) {
char ch;
scanf(" %c", &ch);
if (ch == 'P') in[j]++, edge[i].push_back(j);
else if (ch == 'Q') in[i]++, edge[j].push_back(i);
}
for (int i = 1; i <= m; i++) if (!in[i]) Q.push(i);
cnt = 0;
while (!Q.empty()) {
newn = Q.front(), Q.pop(), cnt++;
for (int i = 0; i < edge[newn].size(); i++) {
in[edge[newn][i]]--;
if (in[edge[newn][i]] == 0) Q.push(edge[newn][i]);
}
}
puts((cnt == m)?"T":"N");
}
}

HDU 5961 传递 题解的更多相关文章

  1. HDU 5961 传递 随机化

    传递 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5961 Description 我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若 ...

  2. HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)     Problem ...

  3. HDU 5961 传递

    http://acm.hdu.edu.cn/showproblem.php?pid=5961 题意: 思路: 话不多说,直接暴力. #include<iostream> #include& ...

  4. 【HDU 5961 传递】

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission ...

  5. HDU - 5961 传递 想法,bfs

    题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...

  6. HDU 5961 传递 BFS

    题意:中文题,就是判断一个竞赛图拆成两个图,判断是否都传递 思路:分别BFS判深度即可,用这种方法注意要进行读入优化. /** @Date : 2016-11-18-20.00 * @Author : ...

  7. hdu 5961 传递 (2016ccpc 合肥站 A题)

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  8. hdu 5961 传递(暴力搜索)

    我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图且它的基图是完全 ...

  9. 【图论】HDU 5961 传递

    题目内容 题目链接 我们称一个有向图G是传递的当且仅当对任意三个不同的顶点a,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图 ...

随机推荐

  1. SpringSecurity(2)---记住我功能实现

    SpringSecurity(2)---记住我功能实现 上一篇博客实现了认证+授权的基本功能,这里在这个基础上,添加一个 记住我的功能. 上一篇博客地址:SpringSecurity(1)---认证+ ...

  2. iOS -NSOperation——高级的并发处理方法

    NSOperation是Objective-C中一种高级的并发处理方法,现在对GCD的封装;功能比GCD更强大! 两个概念      操作:      操作队列:      NSOperation多线 ...

  3. Flutter 中 GestureDetector 的使用误区

    在实际开发中,我们通常需要实现某个组件的更多点击事件.比如:原生的RaisedButton组件是无法响应诸如拖拽或是按下.抬起等细化的动作,它只有一个onPressed()方法来表示.当我们想实现这些 ...

  4. Jackson乱码问题

    在配置文件中加入下面的内容 <!-- Json乱码问题配置--> <mvc:annotation-driven> <mvc:message-converters regi ...

  5. Python变量和注释

    1.变量与变量的作用: (1)什么是变量:变量源于数学,是计算机语言中能存储计算结果或能表示值抽象概念.变量可以通过变量名访问.在指令式语言中,变量通常是可变的:在Python中变量名必须是大小写英文 ...

  6. WEditor(元素定位工具)安装和定位界面元素

     1. 安装adb(安装方法——百度网盘(无邪)) 2. 安装python-uiautomator2 pip install --pre -U uiautomator2 3. 手机设备安装atx-ag ...

  7. 从零开始手把手教你使用原生JS+CSS3实现幸运水果机游戏

    项目体验地址 免费视频教程 游戏介绍 幸运水果机是一款街机游戏,游戏界面由24个方格拼接成一个正方形,每个方格中都有一个不同的水果图形,方格下都有一个小灯.玩家使用游戏币选择希望押注的目标,按下开始后 ...

  8. unknown directive "" in E:\canteen\nginx-1.16.0/conf/nginx.conf:3-------文本编辑器修改nginx配置文件的坑

    nignx小白一个,今天在配置nginx的时候,理所当然的用了文本编辑器编辑并保存了一下nginx的nginx.conf配置文件,一不小心就折腾了几个钟. 保存之后就nginx -s reload一下 ...

  9. Dubbo的使用及原理

    Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo[]是 ...

  10. 同步/异步/阻塞/非阻塞/BIO/NIO/AIO各种情况介绍

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...