传递

Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 753    Accepted Submission(s): 335

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

现在,给你两个有向图P = $(V,E_(p))$和$Q = (V,E_(e))$,满足:
1.   EP与Ee没有公共边;
2.  $(V,E_(p)⋃E_(e))$是一个竞赛图。
你的任务是:判定是否P,Q同时为传递的。

 
Input
包含至多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。保证输入的图一定满足给出的限制条件。
 
Output
对每个数据,你需要输出一行。如果P! Q都是传递的,那么请输出’T’。否则, 请输出’N’ (均不包括引号)。
 
Sample Input
4
4
-PPP
--PQ
---Q
----
4
-P-P
--PQ
P--Q
----
4
-PPP
--QQ
----
--Q-
4
-PPP
--PQ
----
--Q-
 
Sample Output
T
N
T
N

Hint

在下面的示意图中,左图为图为Q。
注:在样例2中,P不是传递的。在样例4中,Q不是传递的。

 
Source
 
Recommend
jiangzijing2015 

比赛的时候没做出来,其实也是水题,就是对所有顶点bfs,看是否有bfs深度为2的顶点。然后卡卡时就可以过了。
代码如下

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#define clr(x) memset(x,0,sizeof(x))
using namespace std;
int inf[];
vector<int> map1[],map2[];
queue<int> que;
bool bfs1();
bool bfs2();
int main()
{
int T;
scanf("%d",&T);
int n,m;
int flag1,flag2;
char c;
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
map1[i].clear();
map2[i].clear();
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
scanf(" %c",&c);
if(c=='P')
{
map1[i].push_back(j);
}
if(c=='Q')
{
map2[i].push_back(j);
}
}
}
flag1=;
flag2=;
while(!que.empty())
que.pop();
for(int i=;i<=n;i++)
{
clr(inf);
inf[i]=;
for(int j=;j<map1[i].size();j++)
{
inf[map1[i][j]]=;
que.push(map1[i][j]);
}
if(!bfs1())
{
flag1=;
break;
}
}
if(que.empty())
for(int i=;i<=n;i++)
{
clr(inf);
inf[i]=;
for(int j=;j<map2[i].size();j++)
{
inf[map2[i][j]]=;
que.push(map2[i][j]);
}
if(!bfs2())
{
flag2=;
break;
}
}
if(flag2== || flag1==)
{
printf("N\n");
}
else
printf("T\n");
}
return ;
}
bool bfs1()
{
int m;
while(!que.empty())
{
m=que.front();
que.pop();
for(int j=;j<map1[m].size();j++)
if(inf[map1[m][j]]==)
{
return ;
}
}
return ;
}
bool bfs2()
{
int m;
while(!que.empty())
{
m=que.front();
que.pop();
for(int j=;j<map2[m].size();j++)
if(inf[map2[m][j]]==)
{
return ;
}
}
return ;
}
 

hdu 5961 传递 (2016ccpc 合肥站 A题)的更多相关文章

  1. hdu 5963 朋友(2016ccpc 合肥站 C题)

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  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 Description 我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若 ...

  4. HDU 5961 传递

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

  5. HDU 5961 传递 BFS

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

  6. 【HDU 5961 传递】

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

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

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

  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. 【HDU】5269 ZYB loves Xor I

    [算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...

  2. Windows Phone 8.1基础教程(1) 页面导航、弹出框

    1. 跳转到其他页面 Frame.Navigate(typeof(页面),参数); 2. 后退回历史页面 Frame.GoBack(); 3. 回跳时判断 if(e.NavigationMode == ...

  3. python学习笔记(五)数值类型和类型转换

    Python中的数值类型有: 整型,如2,520 浮点型,如3.14159,1.5e10 布尔类型 True和False e记法: e记法即对应数学中的科学记数法 >>> 1.5e1 ...

  4. flask函数已定义参数却出现takes 0 positional arguments but 1 was given的问题

    在flask中定义了一个简单的删除数据库内容的路由 测试却发现一直报错 说delete_history函数定义时没有接受参数,但是检查delete_history函数却发现没有问题 后来想了半天才发现 ...

  5. python中的binascii模块

    binascii模块拿来干嘛的? 答:进制转换xxoo #!/usr/bin/env python # encoding:utf-8 # by i3ekr import binascii s = &q ...

  6. 禁用 Cortana 的解决办法

    1. GPedit.msc 2. 然后在本地组策略编辑器中,点击“用户配置”中的“管理模版”,接着双击右侧的“Windows 组件”. 3. 下拉滚动条,并找到“文件资源管理器”,双击进入. 找到“在 ...

  7. Yii 1.1.17 二、Gii创建后台与后台登录验证

    一.用Gii创建后台模块 1.启用gii,在config/main.php 'gii' => array( 'class' => 'system.gii.GiiModule', 'pass ...

  8. python基础===Character string

    本文转自:python之Character string 1.python字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串,l Python不支持单 ...

  9. 【数位dp入门】【HDU4734】F(x)

    记录减的状态,表示还要凑多少才能达到当前值. 然后进行枚举即可.注意状态数不能重复. #include<bits/stdc++.h> #define N 10010 using names ...

  10. 判断ArcSDE是否安装成功

    安装SDE后在ArcMap的Toolboxes - Data Management Tools中会新增Geodatabase Administration 即数据管理工具下面会新增地理数据库管理