HDU 5961 传递 随机化
传递
题目连接:
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),满足:
- EP与Ee没有公共边;
- (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 传递 随机化的更多相关文章
- 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 传递 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 传递】
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission ...
- 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是一个 竞赛图,当且仅当它是一个有向图且它的 ...
- 【图论】HDU 5961 传递
题目内容 题目链接 我们称一个有向图G是传递的当且仅当对任意三个不同的顶点a,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图 ...
- HDU - 5961 传递 想法,bfs
题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...
随机推荐
- 一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)
kafka的前言知识: :Kafka是什么? 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算.kafka是一个生产-消费模型. Producer:生产者,只负责数 ...
- 开始写博客,学习Linq
除了为处理数据提供全新的方法之外,LINQ还代表了一种朝着声明式以及函数式编程发展的转变. 当人们问我为什么要学习LINQ时,我会告诉他们LINQ可以处理XML.关系型数据以及内存中的集合,更会提到L ...
- MVC异常处理(异常捕获)
1.cshtml页面异常 2.Controller异常 3.路由参数异常. 4.页面不存在404 页面不存在404,可以通过配置config来处理 <customErrors mode=&quo ...
- C# 之 下载EXCEL文件,自动用迅雷下载aspx
在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...
- Discuz3.2 新用户插入数据库SQL
我们的网站要和Discuz整合到一起,有个新用户同步的需求,网络上很多的做法是用 UCenter的接口来做,反正最后都是插入SQL,笔者使用了直接操作数据库的方式,把操作的表和SQL整理了下,后面如果 ...
- 前端本地存储localStorage
1.突破cookie 4K限制,一般浏览器支持5M 2.增 删 改 查 <!DOCTYPE html> <html lang="en"> <head& ...
- linux 软中断过高性能优化案例
案例如下: 发现cpu0上的软中断高达50%
- 通过mysql-proxy映射外网访问内网数据库
配置教程: 转自:http://www.centoscn.com/mysql/2015/0107/4437.html centos安装mysql-proxy mysql-proxy的用处就不再说了 m ...
- MVC(面试)
一般都是三层,表现层(UI).业务逻辑层(BLL).数据访问层(DAL),这些东西不用深究,别为了设计而设计就行.分三层是为了使项目架构体系更加清晰,而且项目参与人员的分工也可以更加明确,也有利于项目 ...
- Clairewd’s message ekmp
给两个串第一个串是翻译表(密文可以通过翻译表翻译成明文),第二个串是由密文+明文组成,前面是密文(完整的),后面是明文(未必完整),问能不能把第二个串补全,输出最短的一种可能. 一开始 用的strin ...