HDU 5961 传递 题解
题目
我们称一个有向图G是 传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c。
我们称图G是一个 竞赛图,当且仅当它是一个有向图且它的基图是完全图。换句 话说,将完全图每条边定向将得到一个竞赛图。
下图展示的是一个有4个顶点的竞赛图。

现在,给你两个有向图\(P=(V,E_p)\)和\(Q = (V,E_e)\),满足:
- \(E_P\)与E_$e没有公共边;
- \((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 传递 题解的更多相关文章
- HDU 5961 传递 随机化
传递 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5961 Description 我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若 ...
- HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))
传递 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem ...
- HDU 5961 传递
http://acm.hdu.edu.cn/showproblem.php?pid=5961 题意: 思路: 话不多说,直接暴力. #include<iostream> #include& ...
- 【HDU 5961 传递】
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission ...
- HDU - 5961 传递 想法,bfs
题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...
- HDU 5961 传递 BFS
题意:中文题,就是判断一个竞赛图拆成两个图,判断是否都传递 思路:分别BFS判深度即可,用这种方法注意要进行读入优化. /** @Date : 2016-11-18-20.00 * @Author : ...
- hdu 5961 传递 (2016ccpc 合肥站 A题)
传递 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- hdu 5961 传递(暴力搜索)
我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图且它的基图是完全 ...
- 【图论】HDU 5961 传递
题目内容 题目链接 我们称一个有向图G是传递的当且仅当对任意三个不同的顶点a,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图 ...
随机推荐
- Charles(青花瓷/花瓶)的基本使用
前言 Charles 其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.其次该软件是用 Java 写的,能够在 Windows,Mac,Linux 上使用. ...
- vscode的个人配置
前言 此篇只是为了记录自己vscode的设置,防止以后配置丢失,无实际意义 { "files.autoSave": "afterDelay", "ed ...
- System.getProperty("user.dir")获取的到底是什么路径?
一直用System.getProperty("user.dir")来获取文件目录,我在执行单个方法调试和执行测试脚本的时候碰到一个问题, 我写了一个类ElementInitiali ...
- Android中Widget开发步骤
一.创建一个类,继承自 AppWidgetProvider 生命周期介绍: onEnabled():创建第一个widget时调用 onDisabled():删除最后一个widget时调用 二.在清单文 ...
- 需要加token验证的接口返回文件流下载
没有加token之前,下载文件用的是a标签,直接下载. 现在要求是需要在header中加入token. getDownload(urls, fileName) { var url = urls; va ...
- 定时器+echarts运行时间太长导致内存溢出页面崩溃
最近做的项目需要在页面上展示echarts图表,且数据每隔10s刷新一次,然后发现时间长了以后chorme浏览器会显示页面崩溃.一开始以为是定时器的原因,试了网上的很多方法,比如把setInterva ...
- Quartz SpringBoot 简单整合一下
一次简单的代码整合记录. 数据库准备 如果是MySQL可能出现一些小问题.比如联合主键长度超限制,已经记录解决办法了. CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NA ...
- [LOJ#500]「LibreOJ β Round」ZQC的拼图
题目 点这里看题目. 分析 首先不难发现答案具有单调性,因此可以二分答案.答案上限为\(V=2m\times \max\{a_i, b_i\}\). 考虑如何去判断当前的答案.设这个答案为 ...
- 数据库语言sql
数据库语言SQL SQL的形式 交互式SQL 一般DBMS都提供联机交互工具 用户可直接键入SQL命令对数据库进行操作 由DBMS来进行解释 嵌入式SQL 能将SQL语句嵌入到高级语言(宿主语言) 使 ...
- Mybatis框架介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.201 ...