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. 题解:观察 ...
随机推荐
- DevOps 在公司项目中的实践落地
原文出处:https://www.cnblogs.com/beef/p/7743594.html ref: [DevOps]团队敏捷开发系列--开山篇 https://www.cnblogs.com/ ...
- WPF编程之找不到资源mainWindow.xaml
原文: WPF编程之找不到资源“window1.xaml”之谜 因为将启动窗口移动到了一个新建的文件夹中,启动调试时报找不到资源mainWindow.xaml,原来是App.xaml里面设置的启动窗口 ...
- table无法控制宽度
table-layout:fixed
- python基础——list和tuple(列表和元组)
1.list的定义,插入insert,append,按位置索引. >>> name = ['Macal','lily','lucy','bob'] --初始化>>> ...
- tmux 安装
安装libevent wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz tar xzv ...
- 获取Form表单数据转化成JSON对象
$.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() ...
- mysql 备份 恢复
mysqldump -h127.0.0.1 -uroot -p123456 --databases dbname > e:/mysqlbak/dbname.dump不用新建数据库mysql -h ...
- scrapy meta不用pipe用命令-o
1. spider代码: # -*- coding: utf-8 -*- import scrapy from tencent1.items import Tencent1Item import js ...
- HBase的概述和安装部署
一.HBase概述 1.HBase是Hadoop数据库,是一个分布式.可扩展的大数据存储. HBase是用于对大数据进行随机.实时读写访问的非关系型数据库,它的目标托管非常大的表——数十亿行N百万列. ...
- 解决资源id冲突
--摘自<android插件化开发指南> 1.一套完整的Android App打包流程(Gradle方案) 第一步:aapt.为res目录下的资源生成R.java文件,同时为Android ...