传递

因为文化课复习实在捉急qwq,题解就一切从简了qwq

简单说一说

上来一看这道题没看出来突破点在哪。。。

去HDU上看原题,发现原题是带样例的图解的,然鹅还是没找到思路(太菜了吧)

没办法看了一手大佬的题解,发现都是一句话bitset。。。可是我这个蒟蒻不会用。。。还好有BFS版的挽救我脆弱的心灵

其实说到底就是这个传递的关系要搞明白。假如A是B的父亲,B是C的父亲,那么A必须也是C的父亲,这样才算是传递关系。也就是说,C既是A的孙子又是A的儿子(大雾)。

再假如,A有B、C、D三个儿子,如果B能指向C,那么ABC是满足传递关系的。可如果B指向了EFG等等一堆乱七八糟的,只要有一个不是A能指向的,那么图肯定是不合法的。

所以BFS之,两张图的N个点都遍历一遍,搜索时传一个nex变量(这里用结构体保存,跟点绑在一起),代表这个点的辈分(大雾),如果nex大于等于了2,说明他一定是某个点孙子辈的,但他还不是那个点的儿子,所以不合法直接判掉。

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <queue>
  6. #include <vector>
  7. using namespace std;
  8. const int maxn=1e6+10;
  9. const int inf=0x3f3f3f3f;
  10. #define ll long long
  11. struct Node{
  12. int num,nex;
  13. Node();
  14. Node(int a,int b){
  15. num = a,nex = b;
  16. }
  17. };
  18. vector<int> q[maxn];
  19. vector<int> p[maxn];
  20. char s[maxn];
  21. int n;
  22. int a[maxn];
  23. bool vis[maxn];
  24. bool Check(char flag){
  25. for(int i=1;i<=n;i++){
  26. memset(vis,0,sizeof vis);
  27. queue<Node> que;
  28. que.push(Node(i,0));
  29. while(!que.empty()){
  30. int num = que.front().num;
  31. int nex = que.front().nex;
  32. que.pop();
  33. if(nex >= 2) return 0;
  34. if(flag == 'P'){
  35. for(int i = 0;i < p[num].size();i++){
  36. int v = p[num][i];
  37. if(!vis[v]){
  38. vis[v] = 1;
  39. que.push(Node(v,nex+1));
  40. }
  41. }
  42. }
  43. else if(flag == 'Q'){
  44. for(int i = 0;i < q[num].size();i++){
  45. int v = q[num][i];
  46. if(!vis[v]){
  47. vis[v] = 1;
  48. que.push(Node(v,nex+1));
  49. }
  50. }
  51. }
  52. }
  53. }
  54. return 1;
  55. }
  56. int main(){
  57. int t;
  58. cin>>t;
  59. while(t){
  60. t--;
  61. scanf("%d",&n);
  62. for(int i = 1;i <= n;i++)
  63. q[i].clear(),p[i].clear();
  64. for(int i = 1;i <= n;i++){
  65. scanf("%s",s+1);
  66. for(int j = 1;j <= n;j++){
  67. if(s[j] == 'P') p[i].push_back(j);
  68. if(s[j] == 'Q') q[i].push_back(j);
  69. }
  70. }
  71. if(Check('P') && Check('Q'))
  72. printf("T\n");
  73. else
  74. printf("N\n");
  75. }
  76. }

HDU5961 传递的更多相关文章

  1. 【bitset】【推导】hdu5961 传递

    <法一>http://blog.csdn.net/u014325920/article/details/53046890 1.判断传递的条件为:若G中有 一条边从a到b且有一条边从b到c ...

  2. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  3. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合

    今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...

  4. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  5. tg2015 信息传递 (洛谷p2661)

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  6. Vue 给子组件传递参数

    Vue 给子组件传递参数 首先看个例子吧 原文 html <div class="container" id="app"> <div clas ...

  7. angular view之间的数据传递

    之前写过一篇backbone view之间的传递,由于现在在用angular搞开发,现在也来总结一下.在angular 传递数据通俗的讲叫做 广播 ,在一些文章中,也叫做事件的发布与订阅,在angul ...

  8. 巧用javascript对象属性,向事件绑定的匿名函数内传递循环控制变量的值

    遇到一个需要向匿名函数传递循环控制变量的问题,我受到园子里这篇文章的启发[笔记]js获取当前点击元素的索引,解决了这个问题.现在把代码贴出来,以防止自己忘记. if ($('#labModal').l ...

  9. Android消息传递之组件间传递消息

    前言: 上篇学习总结了Android通过Handler消息机制实现了工作线程与UI线程之间的通信,今天来学习一下如何实现组件之间的通信.本文依然是为学习EventBus做铺垫,有对比才能进步,今天主要 ...

随机推荐

  1. .gitignore文件详细说明

    简介 有些时候,你必须把某些文件放到 Git 工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件.Java编译生成的.class文件.处理这个需求很简单,从不git add它们就可以.但这样 ...

  2. wtf.sh-150

    前言: 最近在刷ctf题,在理解了大佬们的wp后自己做完之后,从头到尾把思路过了一遍,做次记录为以后复习和打比赛做准备,同时也希望能帮到别人. 0x01 进入网址,发现是一个论坛,有注册,登录和发表的 ...

  3. 红楼梦 + 写入 MySQL

    import requests import re import pymysql from bs4 import BeautifulSoup conn = pymysql.Connect(host=' ...

  4. 内核与驱动文件的version magic匹配问题

    https://blog.csdn.net/yubing_615/article/details/52183185 1.问题:本地编译的一整套底层代码down到设备跑都正常,但是由这套代码上传SVN服 ...

  5. window.open打开新的独立页面

    如下所示的代码: window.open('xxxxx.html', '_blank', 'height=100, width=400, top=0, left=0, toolbar=no, menu ...

  6. 数据库连接池 Druid和C3p0

    datasource.properties数据源 #数据源 datasource.peoperties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc: ...

  7. activeMQ从入门到简单集群指南

    1.什么是amq MQ是消息中间件,基于JAVA的JMS消息服务机制来传递信息. 2.mq的作用 MQ给程序之间提供了一个缓冲,避免了在程序交互频繁的情况下,提高程序性能瓶颈和数据的可靠性 3.mq怎 ...

  8. 用turtle画蛇

    import turtle def drawSnake(rad,angle,len,nackrad): for i in range(len): turtle.circle(rad,angle) #画 ...

  9. 命令中"|"的意义

    管道命令,是指 | 的左边运行结果是|右边的输入条件或者范围.如:history | grep date指从history这条命令运行的结果中显示包含有 “date” 的命令 下面举一个例子: 这是运 ...

  10. Linux切换超级管理员root用户

    Ubuntu用$标志表示你现在处于普通用户,#表示超级用户. 普通用户会有限制,想从普通变成超级用户,可以输入 su 或 su - 命令,要求你输入密码, 你如记得密码就可以直接输入,再Enter即可 ...