**题意:**中文题,就是判断一个竞赛图拆成两个图,判断是否都传递
**思路:**分别BFS判深度即可,用这种方法注意要进行读入优化。

/** @Date    : 2016-11-18-20.00

* @Author : Lweleth (SoungEarlf@gmail.com)

* @Link : https://github.com/

* @Version :

*/

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <algorithm>

#include <utility>

#include <vector>

#include <map>

#include <set>

#include <string>

#include <stack>

#include <queue>

//#include<bits/stdc++.h>

#define LL long long

#define pii pair<int ,int>

#define mp(x,y) make_pair((x), (y))

#define fi first

#define se second

#define MMF(x) memset((x),0,sizeof(x))

#define MMI(x) memset((x), INF, sizeof(x))

using namespace std;



const int INF = 0x3f3f3f3f;

const int N = 1e5+2000;







vector<int >ed1[2100], ed2[2100];

int vis[2100];


int main()

{

int T;

scanf("%d", &T);

while(T--)

{

int n;

scanf("%d", &n);



for(int i = 1; i <= n; i++)

ed1[i].clear(), ed2[i].clear();



getchar();

for(int i = 1; i <= n; i++)

{

for(int j = 1; j <= n; j++)

{

char t;

t = getchar();//读入优化

if(t == 'P')

ed1[i].push_back(j);

else if(t =='Q')

ed2[i].push_back(j);

}

getchar();

}



int flag = 0;

for(int i = 1; i <= n; i++)

{

queue<int>q;

q.push(i);

MMF(vis);

while(!q.empty())

{

int nw = q.front();

q.pop();

for(int j = 0; j < ed1[nw].size(); j++)

{

int nl = ed1[nw][j];

if(vis[nl] == 0)//第二层的新点,表明第一层不能到达 直接退出

{

vis[nl] = vis[nw] + 1;

if(nw != i || vis[nl] >= 2)

{

flag = 1;

break;

}

q.push(nl);

}

}

if(flag)

break;

}

while(!q.empty())

q.pop();

MMF(vis);

q.push(i);

while(!q.empty())

{

int nw = q.front();

q.pop();

for(int j = 0; j < ed2[nw].size(); j++)

{

int nl = ed2[nw][j];

if(vis[nl] == 0)

{

vis[nl] = vis[nw] + 1;

if(nw != i || vis[nl] >= 2)

{

flag = 1;

break;

}

q.push(nl);

}

}

if(flag)

break;

}

}

if(flag)

puts("N");

else puts("T");



}

return 0;

}

HDU 5961 传递 BFS的更多相关文章

  1. HDU - 5961 传递 想法,bfs

    题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...

  2. HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)     Problem ...

  3. HDU 5961 传递 随机化

    传递 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5961 Description 我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若 ...

  4. HDU 5961 传递

    http://acm.hdu.edu.cn/showproblem.php?pid=5961 题意: 思路: 话不多说,直接暴力. #include<iostream> #include& ...

  5. hdu 5961 传递 (2016ccpc 合肥站 A题)

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  6. 【图论】HDU 5961 传递

    题目内容 题目链接 我们称一个有向图G是传递的当且仅当对任意三个不同的顶点a,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图 ...

  7. 【HDU 5961 传递】

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission ...

  8. hdu 5961 传递(暴力搜索)

    我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个竞赛图,当且仅当它是一个有向图且它的基图是完全 ...

  9. HDU 5961 传递 题解

    题目 我们称一个有向图G是 传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个 竞赛图,当且仅当它是一个有向图且它的 ...

随机推荐

  1. [C++] Fucntions

    Statements A break statements terminate the nearest wile, do while, for or switch statement. A break ...

  2. POJ 3675 Telescope(简单多边形和圆的面积交)

    Description Updog is watching a plane object with a telescope. The field of vision in the telescope ...

  3. this指针与const成员函数

    this指针的类型为:classType *const      // 即指向类类型非常量版本的常量指针 所以,我们不能把this绑定到一个常量对象上 ===>  不能在一个常量对象上调用普通的 ...

  4. BluetoothAdapter解析

    这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每个常量含义. 一 BluetoothAdapter简介 1.继承关系 该类仅继承了Object类; 2.该类作用 ...

  5. TCP系列25—重传—15、DSACK虚假重传探测

    一.DSACK介绍 RFC2883通过指定使用SACK来指示接收端的重复包(duplicate packet)扩展了RFC2018对SACK选项的定义(SACK选项的介绍和示例参考前面内容).RFC2 ...

  6. OSG数学基础:坐标系统

    坐标系是一个精确定位对象位置的框架,所有的图形变换都是基于一定的坐标系进行的. 三维坐标系总体上可以分为两大类:左手坐标系和右手坐标系. 常用的坐标系:世界坐标系.物体坐标系和摄像机坐标系. 世界坐标 ...

  7. ASP.NET 使用MVC4的EF5 Code First 入门(一):创建数据库

    一.基本流程 建立模型→建立控制器→EF框架自动生成视图的数据库 二.基本理论 1.约定优于配置(Convention Over Configuration) 设计不好的框架通常需要多个配置文件,每一 ...

  8. 异常--throw

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. checkBox1_CheckedChanged(object sender, EventArgs e)和checkBox1_CheckStateChanged(object sender, EventArgs e)不同

    using System; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms ...

  10. matlab如何将数组中的NAN值去除

        比如我们一组数据,里面有不少的NaN值,如何将其删除掉呢?可以通过find函数来搞定.     我们可以通过importdata('data.txt')将数据文件data.txt导入数组A中. ...