传递

题目连接:

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. mybatis_generator_逆向工程的使用笔记

    1:解压mybatis_generator_1.3.1.zip文件. 2:把features,pougins文件夹copy到D:\java\eclipse\eclipse目录下(D:\java\ecl ...

  2. CentOS6.9安装HDFS

    1.安装依赖包 yum install -y gcc openssh-clients 2.升级glib2.14 升级glibc-2.14用到的rpm 下载地址:https://pan.baidu.co ...

  3. UE4 UPROPERTY UFUNCTION

    http://blog.csdn.net/sinat_27456831/article/details/52800514

  4. 如何访问https的网站?-【httpclient】

    备注:本处代码使用groovy和httpclient4.3作为例子进行讲述 在普通方式下,当使用httpclient进行访问某个网站时,大致使用如下的代码进行访问: CloseableHttpClie ...

  5. python函数默认参数为可变对象的理解

    1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象. 2.代码执行不在初始化函数,而是直接执行函数体. 代码实例 这要从函数的特性说起,在 Python ...

  6. linux实现自动检测进程是否存活的脚本

    可以在性能测试过程中.定期检测startAgent和nmon的状态 #!/bin/sh while true do pnmon=`ps aux | grep nmon | grep -v grep`; ...

  7. python--smtp邮件使用

    #构建对象时,第一个是邮件正文,第二个发送类型,plain表示纯文本,最后使用utf-8保证多语言兼容 #如果需要发送html的话,就把plain改为html------>内容使用html构造便 ...

  8. 51Nod1773 A国的贸易 多项式 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1773.html 题目传送门 - 51Nod1773 题意 给定一个长度为 $2^n$ 的序列,第 $ ...

  9. Codeforces 555C Case of Chocolate 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/9272797.html 题目传送门 - CF555C 题意 给定一个 $n\times n(n\leq 10^9 ...

  10. 020100——00002_OS库

    OS 库中文文档:https://yiyibooks.cn/xx/python_352/library/os.html OS 库英文文档:https://docs.python.org/3/libra ...