【CCCC】L3-025 那就别担心了 (30分),dfs搜索起点到终点的路径条数。

简介: 【CCCC】L3-025 那就别担心了 (30分),dfs搜索起点到终点的路径条数。

problem

L3-025 那就别担心了 (30分)
下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。

ziqia.jpg

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

solution

//给出n个点m条边的有向图,判断a到b有几条路,以及从a出发的终点是否都是b。
//先跑一遍dfs,维护从终点到点u的路径条数,答案为f[a]-f[b]。再跑一遍bfs,判断起点出发是否会到达从终点出发无法到达的点。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 510;

vector<int>G[maxn];

int s, t;
int f[maxn];//记忆化,维护从终点反向搜索到u的路径有几条
int dfs(int u){
    if(f[u])return f[u];
    if(u==t)return 1;
    for(int i = 0; i < G[u].size(); i++){
        int v = G[u][i];
        f[u] += dfs(v);
    }
    return f[u];
}

int ok=1;
int vis[510];
void bfs(){
    queue<int>q;
    q.push(s);
    while(q.size()){
        int tmp = q.front();  q.pop();
        if(vis[tmp])continue;
        vis[tmp] = 1;
        if(f[tmp]==0){
            ok = 0; break;
        }
        if(tmp==t)continue;
        for(int i = 0; i < G[tmp].size(); i++){
            int v = G[tmp][i];
            q.push(v);
        }
    }
}

int main(){
    int n, m;
    cin>>n>>m;
    for(int i = 1; i <= m; i++){
        int u, v;  cin>>u>>v;
        G[u].push_back(v);
    }
    cin>>s>>t;
    dfs(s);
    cout<<f[s]-f[t]<<" ";
    f[t] = 1;
    bfs();
    if(ok)cout<<"Yes\n";
    else cout<<"No\n";
    return 0;
}
目录
相关文章
|
定位技术
【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
340 0
|
Java Go 数据库
深度思考:到底什么是面向接口编程?
深度思考:到底什么是面向接口编程?
237 0
|
11月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
481 8
|
NoSQL JavaScript 前端开发
SpringBoot+Vue实现校园二手系统。前后端分离技术【完整功能介绍+实现详情+源码】
文章介绍了如何使用SpringBoot和Vue实现一个校园二手系统,采用前后端分离技术。系统具备完整的功能,包括客户端和管理员端的界面设计、个人信息管理、商品浏览和交易、订单处理、公告发布等。技术栈包括Vue框架、ElementUI、SpringBoot、Mybatis-plus和Redis。文章还提供了部分源代码,展示了前后端的请求接口和Redis验证码功能实现,以及系统重构和模块化设计的一些思考。
SpringBoot+Vue实现校园二手系统。前后端分离技术【完整功能介绍+实现详情+源码】
|
机器人 Java 编译器
2024年睿抗机器人开发者大赛(RAICOM)CAIP-编程技能赛-本科组省赛_题解
这篇文章是关于2024年睿抗机器人开发者大赛(RAICOM)CAIP-编程技能赛-本科组省赛的题解,作者分享了自己的得分和比赛经历,以及对比赛过程中出现问题的不满,同时提供了几道题目的解题思路和代码实现。
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园二手交易平台系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园二手交易平台系统的详细设计和实现(源码+lw+部署文档+讲解等)
366 1
|
SQL XML Java
[Java]Mybatis学习笔记(动力节点老杜)(一)
[Java]Mybatis学习笔记(动力节点老杜)(一)
|
架构师 NoSQL 前端开发
|
人工智能 BI 知识图谱
2019年 团体程序设计天梯赛——题解集
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-057 PTA使我精神焕发 (5分) 本题题目链接 以上是湖北经济学院同学的大作。本题就请你用汉语拼音输出这句话。 输入格式: 本题没有输入。
439 0
 2019年 团体程序设计天梯赛——题解集