传递

因为文化课复习实在捉急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,说明他一定是某个点孙子辈的,但他还不是那个点的儿子,所以不合法直接判掉。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int maxn=1e6+10;
const int inf=0x3f3f3f3f;
#define ll long long struct Node{
int num,nex;
Node();
Node(int a,int b){
num = a,nex = b;
}
}; vector<int> q[maxn];
vector<int> p[maxn];
char s[maxn];
int n;
int a[maxn];
bool vis[maxn]; bool Check(char flag){
for(int i=1;i<=n;i++){
memset(vis,0,sizeof vis);
queue<Node> que;
que.push(Node(i,0));
while(!que.empty()){
int num = que.front().num;
int nex = que.front().nex;
que.pop();
if(nex >= 2) return 0;
if(flag == 'P'){
for(int i = 0;i < p[num].size();i++){
int v = p[num][i];
if(!vis[v]){
vis[v] = 1;
que.push(Node(v,nex+1));
}
}
}
else if(flag == 'Q'){
for(int i = 0;i < q[num].size();i++){
int v = q[num][i];
if(!vis[v]){
vis[v] = 1;
que.push(Node(v,nex+1));
}
}
}
}
}
return 1;
} int main(){
int t;
cin>>t;
while(t){
t--;
scanf("%d",&n); for(int i = 1;i <= n;i++)
q[i].clear(),p[i].clear(); for(int i = 1;i <= n;i++){
scanf("%s",s+1);
for(int j = 1;j <= n;j++){
if(s[j] == 'P') p[i].push_back(j);
if(s[j] == 'Q') q[i].push_back(j);
}
}
if(Check('P') && Check('Q'))
printf("T\n");
else
printf("N\n");
}
}

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. 运维、python、docker视频教程

    https://space.bilibili.com/97139894/?spm_id_from=333.788.b_7265636f5f6c697374.13 https://www.bilibil ...

  2. python—模块与包

    模块: (一个.py文件就是一个模块module,模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.) 模块分三种: 1.python标准库 2.第三方模块 3.应用程序自定义模块 ...

  3. dfs算法总结

    DFS 深度优先搜索 主要有两种实现方法:栈和递归 什么是DFS?说白了就是一直遍历元素的方式而已,我们可以把它看成是一条小蛇,在每个分叉路口随意选择一条路线走,直到撞到南墙,才会调头返回到上一个分叉 ...

  4. Cypress系列(14)- 环境变量详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 环境变量,其实就是根据环境的变化, ...

  5. jdbc+mysql常见报错总结

    1.The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You ...

  6. @codeforces - 607E@ Cross Sum

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 n 条直线,构造可重点集合 I 为 n 条直线两两的交点集 ...

  7. 从0到70%:Chrome上位揭秘!

    最近的数据显示,Chrome在2020年4月的市场份额达到了70%左右,把微软的Edge和Firefox远远甩在身后,毫无疑问,Chrome赢得了第二次游览器之战,成为新一代王者. Chrome的第一 ...

  8. gradle的搭建和配置

    下载 官方网站:https://gradle.org/install/#manually 提供了两种下载方式,Binary-only是只下载二进制源码,Complete, with docs and ...

  9. JSON案例

    原文链接:https://zhuanlan.zhihu.com/p/62763428 json字符串->JSONObject 用JSON.parseObject()方法即可将JSon字符串转化为 ...

  10. Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册

    一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...