• 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
    */
    
  • 相关阅读:
    数组
    原生获取 键盘 keycode 鼠标 键码
    javascript 拖拽
    简单的鼠标拖拽
    vue中格式化时间戳
    使用koa+angular+mysql 完成了一个企业站
    koa2+mysql5+angularjs1 搭建前后端全栈项目
    javascript利用闭包实现迭代器轮询数组中的元素
    AngularJS 1.x版本 学习教程
    改变,从羡慕别人开始
  • 原文地址:https://www.cnblogs.com/waryan/p/14067432.html
Copyright © 2020-2023  润新知