下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。

博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题(开玩笑的,千万别以为这是真正的逻辑自洽的定义……)。现给定一个更为复杂的逻辑推理图,本题就请你检查从一个给定命题到另一个命题的推理是否是“逻辑自洽”的,以及存在多少种不同的推理路径。例如上图,从“你遇到难题了吗?”到“那就别担心了”就是一种“逻辑自洽”的推理,一共有 3 条不同的推理路径。

输入格式:
输入首先在一行中给出两个正整数 N(1<N≤500)和 M,分别为命题个数和推理个数。这里我们假设命题从 1 到 N 编号。

接下来 M 行,每行给出一对命题之间的推理关系,即两个命题的编号 S1 S2,表示可以从 S1 推出 S2。题目保证任意两命题之间只存在最多一种推理关系,且任一命题不能循环自证(即从该命题出发推出该命题自己)。

最后一行给出待检验的两个命题的编号 A B。

输出格式:
在一行中首先输出从 A 到 B 有多少种不同的推理路径,然后输出 Yes 如果推理是“逻辑自洽”的,或 No 如果不是。题目保证输出数据不超过 10​9​​ 。

输入样例 1:
7 8
7 6
7 4
6 5
4 1
5 2
5 3
2 1
3 1
7 1

输出样例 1:
3 Yes

输入样例 2:
7 8
7 6
7 4
6 5
4 1
5 2
5 3
6 1
3 1
7 1

输出样例 2:
3 No

分析:Edge中储存第i个命题可以推出的命题编号,A、B表示起始路径和终点路径,laneNum[i]储存从第i个命题到第B个命题有多少种不同的推理路径,laneNum[B]的初始值为1。consistency表示推理是否逻辑自洽。通过记忆化dfs从A点开始更新laneNum的值,index表示当前所在的命题编号,如果laneNum[index]为0则表示已经向后搜索过,直接返回其数值即可~将laneNum[index]加上它所有可以到达的后续节点Next的laneNum值,如若某点的laneNum值为0,则表示从A出发到这一命题,不能继续向下推理到命题B,则标记consistency为1~

#include <bits/stdc++.h>
using namespace std;
int N, M, S1, S2, A, B, consistency, laneNum[502];
vector<int> Edge[502];
int dfs(int index) {if (laneNum[index] != 0) return laneNum[index];for (int Next : Edge[index]) {if (laneNum[Next] == 0) dfs(Next);laneNum[index] += laneNum[Next];}if (laneNum[index] == 0) consistency = 1;return laneNum[index];
}
int main() {cin >> N >> M;for (int i = 0; i < M; ++i) {cin >> S1 >> S2;Edge[S1].push_back(S2);}cin >> A >> B;laneNum[B] = 1;dfs(A);cout << laneNum[A] << ' ' << (consistency ? "No" : "Yes");return 0;
}

L3-025 那就别担心了 (30 分)-PAT 团体程序设计天梯赛 GPLT相关推荐

  1. L3-012 水果忍者 (30 分)-PAT 团体程序设计天梯赛 GPLT

    2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...

  2. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

  3. L3-021 神坛 (30 分)-PAT 团体程序设计天梯赛 GPLT

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  4. L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...

  5. L3-017 森森快递 (30 分)-PAT 团体程序设计天梯赛 GPLT

    森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由于道路限制,第i号城市(i=0,⋯,N−2)与第(i ...

  6. L3-016 二叉搜索树的结构 (30 分)-PAT 团体程序设计天梯赛 GPLT

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

  7. L3-009 长城 (30 分)-PAT 团体程序设计天梯赛 GPLT

    正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...

  8. L3-006 迎风一刀斩 (30 分)-PAT 团体程序设计天梯赛 GPLT

    迎着一面矩形的大旗一刀斩下,如果你的刀够快的话,这笔直一刀可以切出两块多边形的残片.反过来说,如果有人拿着两块残片来吹牛,说这是自己迎风一刀斩落的,你能检查一下这是不是真的吗? 注意摆在你面前的两个多 ...

  9. L3-023 计算图 (30 分)--PAT 团体程序设计天梯赛 GPLT

    "计算图"(computational graph)是现代深度学习系统的基础执行引擎,提供了一种表示任意数学表达式的方法,例如用有向无环图表示的神经网络. 图中的节点表示基本操作或 ...

最新文章

  1. UVA699 下落的树叶 The Falling Leaves(二叉树的递归遍历建树)
  2. JavaScript前端框架的思考
  3. 【转】C#播放H264裸码流
  4. 关于ORA-06508 , ORA-04068异常的详细说明
  5. Forbidden You don#39;t have permission to access / on this server.
  6. 【Python】用Python实现十大经典排序算法
  7. 日周月筛选器_举个栗子!Tableau 技巧(147):使用 动态参数 筛选到最新日期值...
  8. Just for fun——go实现一下观察者模式
  9. 51单片机mysql_51单片机的定时器
  10. HDU1425 sort【排序】
  11. 经典排序算法(十一)--堆排序Heap Sort
  12. 程序员常去的14个顶级开发社区
  13. pandas数据分析之分组聚合
  14. 迅雷9解决php文件,迅雷9的这些优化 你必须要知道
  15. 013.自驾游加油方案
  16. A1008 Elevator (20 分)
  17. Linux centOS系统备份还原(dd+rsync方式)
  18. LXC的Python学习笔记
  19. VSCode通过源代码管理插件GitLens提交项目代码的过程
  20. 微博开放领域的事件抽取【持续更新】

热门文章

  1. android 使用天地图,天地图嵌入到Android手机中
  2. linux利用内存加快读盘速度,Linux性能优化从入门到实战:10 内存篇:如何利用Buffer和Cache优化程序的运行效率?...
  3. 浅谈WebView的使用
  4. androidpn的学习研究(八)androidpn 中业务类XmppIoHandler实现分析
  5. jquery. Validator验证框架ajax返回json数据
  6. Android各个版本API的区别
  7. 转载 2012年游戏行业人才需求预测
  8. iOS WKWebView和JS交互的两种方式
  9. 简单几何(圆与多边形公共面积) UVALive 7072 Signal Interference (14广州D)
  10. 黑马程序员-代理类的作用与原理及AOP