[CSP-S模拟测试]:传递(暴力+bitset)
题目描述
我们称一个有向图$G$是传递的,当且仅当对于图$G$的三个不同顶点$a,b,c$,若图$G$中有一条边从$a$到$b$且有一条边从$b$到$c$,那么图中也有一条边从$a$到$c$。
我们称一个图$G$是竞赛图,当且仅当它是一个有向图且它的基图是完全图。也就是,将无向完全图的每条边重新定向就能得到一个竞赛图。
现在,给定两张有向图$P=(V,E_P)$和$Q=(V,E_Q)$,满足:$E_p$和$E_q$没有公共边,且图$(V,E_P\cup E_Q)$是一个竞赛图。
你的任务是:判定有向图$P$和$Q$是不是都是传递的。
输入格式
输入文件为$trans.in$。
输入文件中包含多组测试数据,每组第一行有一个整数$T$表示数据组数。
对于每组数据,第一行一个整数$N$表示点数。接下来$N$行,每行为连续的$N$个字符。每个字符只可能是$'-','P','Q'$中的一种。
如果第$i$行第$j$列的字符为$'-'$,表示两个图中均没有边从$i$到$j$。
如果第$i$行第$j$列的字符为$'P'$,表示有向图$P$中有一条边从$i$到$j$。
如果第$i$行第$j$列的字符为$'Q'$,表示有向图$Q$中有一条边从$i$到$j$。
输出格式
输出文件为$trans.out$。
输出共$T$行。对于每组数据,如果图$P$和$Q$都是传递的,输出$'T'$,否则输出$'Q'$。
样例
样例输入:
2
4
-PPP
--QQ
----
--Q-
4
-P-P
--PQ
P--Q
----
样例输出:
T
N
数据范围与提示
对于$30\%$的数据,满足$N\leqslant 200$。
对于$60\%$的数据,满足$N\leqslant 800$。
对于$100\%$的数据,满足$1\leqslant T\leqslant 5,1\leqslant N\leqslant 2016$。
题解
再一次没有打正解
遇到这种题,直接想$bitset$,用一个$bitset$优化暴力就好了。
时间复杂度:$\Theta(\frac{n^3}{\omega})$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
struct rec{int nxt,to;}P[10000000],Q[10000000];
int headP[2100],headQ[2100],cntP,cntQ;
int n;
char ch[2100];
bitset<2100> bitP[2100],bitQ[2100];
void pre_work()
{
memset(headP,0,sizeof(headP));
memset(headQ,0,sizeof(headQ));
for(int i=1;i<=2099;i++)
{
bitP[i].reset();
bitQ[i].reset();
}
cntP=cntQ=0;
}
void addP(int x,int y)
{
P[++cntP].nxt=headP[x];
P[cntP].to=y;
headP[x]=cntP;
bitP[x][y]=1;
}
void addQ(int x,int y)
{
Q[++cntQ].nxt=headQ[x];
Q[cntQ].to=y;
headQ[x]=cntQ;
bitQ[x][y]=1;
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
pre_work();scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",ch+1);
for(int j=1;j<=n;j++)
switch(ch[j])
{
case 'P':addP(i,j);break;
case 'Q':addQ(i,j);break;
}
}
for(int x=1;x<=n;x++)
for(int i=headP[x];i;i=P[i].nxt)
if((bitP[x]&bitP[P[i].to])!=bitP[P[i].to]){puts("N");goto nxt;}
for(int x=1;x<=n;x++)
for(int i=headQ[x];i;i=Q[i].nxt)
if((bitQ[x]&bitQ[Q[i].to])!=bitQ[Q[i].to]){puts("N");goto nxt;}
puts("T");nxt:;
}
return 0;
}
rp++
[CSP-S模拟测试]:传递(暴力+bitset)的更多相关文章
- [考试反思]1009csp-s模拟测试66:依旧
依旧是好一场烂一场. 依旧是那么菜. 依旧是难止颓废. 依旧是在此方仰望,幻想? 上面这段中二的东西是为了防止Parisb说我的标题与内容无关而diss我莫名其妙115的语文. 但是菜是的确是菜... ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...
- Python 的mock模拟测试介绍
如何不靠耐心测试 可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unitt ...
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...
- 【转】利用Python中的mock库对Python代码进行模拟测试
出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]1003csp-s模拟测试58:沉淀
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...
随机推荐
- python+selenium元素定位之CSS学习01
参考文档:https://www.w3school.com.cn/cssref/css_selectors.asp 选择器 例子 例子描述 CSS .class .intro 选择 class=&qu ...
- [Web 前端] 016 css 元素的转换
三种元素之间的转换 display 属性是用来设置元素的类型及隐藏的 常用的属性有 none 元素隐藏且不占位置 block 元素以块元素显示 inline 元素以内联元素显示 inline-bloc ...
- [Python3 填坑] 017 实例方法、静态方法、类方法的区别
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 先上例子 2.2 分析 1. print( 坑的信息 ) 挖坑时间:2019/04/07 明细 坑的编码 内容 Py024-1 实例方法 ...
- (一) MySQL架构
1.MySQL架构 MySQL拥有分层的架构,上层是服务器层的服务和查询执行引擎,下层是存储引擎,真正负责数据的存储和提取. 服务层包含了连接和线程处理,以及大多数MySQL的核心服务,如对SQL的解 ...
- .net core 自定义中间件
public class MyMiddleware { //private IConfiguration _configuration; //第一步: private RequestDelegate ...
- 解决MySQL报错:Access denied for user ‘root’@‘localhost’(using password: YES)
Windows 10(mysql5.1) 修改配置文件 找到MySQL安装目录下配置文件my.ini(在我的win10环境下,其路径为C:\ProgramData\MySQL\MySQL Server ...
- java_第一年_JDBC(6)
DataBaseMetaData对象:由Connection.getDataBaseMetaData()方法获得,可以用来获取数据库的元数据,提供的方法有: getURL():返回一个String类, ...
- linux驱动模型——platform(2)
一. platform 组织架构 1.1. platform工作体系都定义在drivers/base/platform.c中 1.2. platform相关函数声明在include/linux/pla ...
- jsp:include 通过变量作为路径动态引入
语法:<jsp:include page="<%=整体是个变量%>" flush="true"/> 示例: <%@ page la ...
- python 导入json模块的用法
json用于字符串,和 python数据类型间进行转换,json模块有四个功能,dumps,dump,loads,load. json 用法 json.dumps 将数据通过特殊的形式转换为所有程序语 ...