题目描述

我们称一个有向图$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)的更多相关文章

  1. [考试反思]1009csp-s模拟测试66:依旧

    依旧是好一场烂一场. 依旧是那么菜. 依旧是难止颓废. 依旧是在此方仰望,幻想? 上面这段中二的东西是为了防止Parisb说我的标题与内容无关而diss我莫名其妙115的语文. 但是菜是的确是菜... ...

  2. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  3. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  4. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  5. Python 的mock模拟测试介绍

    如何不靠耐心测试 可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unitt ...

  6. [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania

    [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...

  7. 【转】利用Python中的mock库对Python代码进行模拟测试

    出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...

  8. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  9. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

随机推荐

  1. C++[Tarjan求点双连通分量,割点][HNOI2012]矿场搭建

    最近在学图论相关的内容,阅读这篇博客的前提是你已经基本了解了Tarjan求点双. 由割点的定义(删去这个点就可使这个图不连通)我们可以知道,坍塌的挖煤点只有在割点上才会使这个图不连通,而除了割点的其他 ...

  2. php7.3连接MySQL8.0报错 PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]

    报的错误: In Connection.php line : SQLSTATE[HY000] [] The server requested authentication method unknown ...

  3. git --> 工作使用流程

    [git]------git开发过程中的使用流程------[WangQi]   001.创建仓库 002.新建项目 003.初始化仓库  这一步不需要做 git init : 文件夹中会多出一个隐藏 ...

  4. (4.30)全面了解触发器:DML、DDL、LOGON触发器

    DML.DDL.LOGON触发器 转自:https://www.cnblogs.com/seusoftware/p/9120632.html 触发器可以理解为由特定事件触发的存储过程, 和存储过程.函 ...

  5. JDK8 parallelStream性能测试

    https://blog.csdn.net/u011870280/article/details/80700993 public static void main(String[] args) {lo ...

  6. Ubuntu 12.04安装Gitlab及问题解决

    最近看了下Git,并且之前听同学说过gitlab这个东西,就想自己也搭建一个gitlab,做一个像github那样的代码管理站点,现在的gitlab要安装确实是非常非常方便, https://abou ...

  7. TP5.1+Vue前后端分离实践

    配置: 主域名 www.demo.xyz 二级子域名 api.demo.xyz 列表项目其中api.demo.xyz加入了版本控制,使用的是URL路由传入方式 在route.php路由文件中配置,如下 ...

  8. wxpython中复选框的基本使用源码实例

    #coding=utf-8 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1, ...

  9. jquery 使用a标签导航栏跳转页面,动态添加高亮

    众所周知,使用a标签跳转之后,会刷新一次,继而这个添加的样式就会消失.那么怎么解决这一问题呢? <script> $(function () { $('.bar a').each(func ...

  10. rsync 和 inotify 结合

    我们知道 rsync 可以实现推送和拉取,而 inotify-tools 借助内核的 inotify 机制实现了文件的 实时监控.因此,借助这个思路,我们可以通过使用 shell 脚本,调整 inot ...