传递

题目连接:

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

Description

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

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

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

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

  1. EP与Ee没有公共边;
  2. (V,Ep⋃Ee)是一个竞赛图。

    你的任务是:判定是否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

题意

题解:

题目给了贼多的条件,感觉好像是很难的问题。

于是我们随机化吧,随便随机了一下就过了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2017; string s[maxn];
vector<int> E1[maxn];
vector<int> E2[maxn];
int n;
int step;
int check1(){
step = 1000000;
for(int i=0;i<step;i++){
int x = rand()%n+1;
for(int j=0;j<E1[x].size();j++){
int v = E1[x][j];
for(int k=0;k<E1[v].size();k++){
int z = E1[v][k];
if(s[x][z]!='P')
return 0;
step--;
if(step<i)return 1;
}
}
}
return 1;
}
int check2(){
step = 1000000;
for(int i=0;i<step;i++){
int x = rand()%n+1;
for(int j=0;j<E2[x].size();j++){
int v = E2[x][j];
for(int k=0;k<E2[v].size();k++){
int z = E2[v][k];
if(s[x][z]!='Q')
return 0;
step--;
if(step<i)return 1;
}
}
}
return 1;
}
void solve(){
scanf("%d",&n);
for(int i=0;i<maxn;i++)
E1[i].clear(),E2[i].clear();
for(int i=0;i<n;i++)
cin>>s[i];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(s[i][j]=='P'){
E1[i].push_back(j);
}
}
}
int flag1=check1();
for(int i=0;i<maxn;i++)
E1[i].clear(),E2[i].clear();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(s[i][j]=='Q'){
E2[i].push_back(j);
}
}
}
int flag2=check2();
if(flag1+flag2==2){
cout<<"T"<<endl;
}else{
cout<<"N"<<endl;
}
}
int main(){
srand(772002);
int t;scanf("%d",&t);
while(t--)solve();
}

HDU 5961 传递 随机化的更多相关文章

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

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

  2. HDU 5961 传递

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

  3. HDU 5961 传递 BFS

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

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

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

  5. 【HDU 5961 传递】

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

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

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

  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 传递 想法,bfs

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

随机推荐

  1. 一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)

    kafka的前言知识: :Kafka是什么? 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算.kafka是一个生产-消费模型. Producer:生产者,只负责数 ...

  2. 开始写博客,学习Linq

    除了为处理数据提供全新的方法之外,LINQ还代表了一种朝着声明式以及函数式编程发展的转变. 当人们问我为什么要学习LINQ时,我会告诉他们LINQ可以处理XML.关系型数据以及内存中的集合,更会提到L ...

  3. MVC异常处理(异常捕获)

    1.cshtml页面异常 2.Controller异常 3.路由参数异常. 4.页面不存在404 页面不存在404,可以通过配置config来处理 <customErrors mode=&quo ...

  4. C# 之 下载EXCEL文件,自动用迅雷下载aspx

    在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...

  5. Discuz3.2 新用户插入数据库SQL

    我们的网站要和Discuz整合到一起,有个新用户同步的需求,网络上很多的做法是用 UCenter的接口来做,反正最后都是插入SQL,笔者使用了直接操作数据库的方式,把操作的表和SQL整理了下,后面如果 ...

  6. 前端本地存储localStorage

    1.突破cookie 4K限制,一般浏览器支持5M 2.增 删 改 查 <!DOCTYPE html> <html lang="en"> <head& ...

  7. linux 软中断过高性能优化案例

    案例如下: 发现cpu0上的软中断高达50%

  8. 通过mysql-proxy映射外网访问内网数据库

    配置教程: 转自:http://www.centoscn.com/mysql/2015/0107/4437.html centos安装mysql-proxy mysql-proxy的用处就不再说了 m ...

  9. MVC(面试)

    一般都是三层,表现层(UI).业务逻辑层(BLL).数据访问层(DAL),这些东西不用深究,别为了设计而设计就行.分三层是为了使项目架构体系更加清晰,而且项目参与人员的分工也可以更加明确,也有利于项目 ...

  10. Clairewd’s message ekmp

    给两个串第一个串是翻译表(密文可以通过翻译表翻译成明文),第二个串是由密文+明文组成,前面是密文(完整的),后面是明文(未必完整),问能不能把第二个串补全,输出最短的一种可能. 一开始 用的strin ...