zoukankan      html  css  js  c++  java
  • L3-1 那就别担心了 (30分)

    题目

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

    ziqia.jpg

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

    输入格式:

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

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

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

    输出格式:

    在一行中首先输出从 AB 有多少种不同的推理路径,然后输出 Yes 如果推理是“逻辑自洽”的,或 No 如果不是。

    题目保证输出数据不超过 109。

    思路

    记忆搜索以后bfs遍历一遍标记

    #include<bits/stdc++.h>
    using namespace std;
    //#define int long long
    vector<int>edge[510];
    
    int s, t;
    int dp[510];
    int dfs(int u) {
    
        if (dp[u]) {
            return dp[u];
        }
        if (u == t) {
            return 1;
        }
        for (auto v : edge[u]) {
            dp[u] += dfs(v);
        }
        return dp[u];
    }
    int flag;
    int vis[510];
    void bfs1() {
        queue<int>Q;
        Q.push(s);
        while (!Q.empty()) {
            int now = Q.front(); Q.pop();
            if (vis[now]) continue;
            vis[now] = 1;
            if (!dp[now]) {
                flag = 1; break;
            }
            if (now == t) continue;
            for (auto v : edge[now]) {
                Q.push(v);
            }
        }
    }
    
    signed main() {
        int n, m;
        cin >> n >> m;
        while (m--) {
            int u, v;
            cin >> u >> v;
            edge[u].push_back(v);
        }
        cin >> s >> t;
        dfs(s);
        cout << dp[s] -dp[t] << " ";
        dp[t] = 1;
        bfs1();
        if (!flag) cout << "Yes
    ";
        else cout << "No
    ";
    }
    
    /*
    1 2
    1 3
    1 4
    2 5
    3 5
    4 5
    5 6
    5 7
    5 8
    6 7
    6 9
    7 9
    8 9
    */
    
  • 相关阅读:
    为什么说 LINQ 要胜过 SQL
    统一日志系统 Log4Net/ExceptionLess
    使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
    使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
    安全的API接口解决方案
    任务调度及远端管理(基于Quartz.net)
    关于.NET参数传递方式的思考
    C# Parsing 类实现的 PDF 文件分析器
    .NET的弹性及瞬间错误处理库Polly
    Mybatis官方网站
  • 原文地址:https://www.cnblogs.com/waryan/p/14067432.html
Copyright © 2011-2022 走看看