zoukankan      html  css  js  c++  java
  • 洛谷P2419 [USACO08JAN]Cow Contest S 题解 DAG上的简单搜索

    题目链接:https://www.luogu.com.cn/problem/P2419

    解题思路:

    本题其实是求解一类 “关键点”(这里指的关键点是所有点和它之间都能够达到的那些点),我是用dfs搜了 \(n\) 边,因为是 DAG ,所以时间复杂度为 \(O(n^2)\)

    但是虽然题面里说保证是 DAG,但是数据好像没有完全保证的样子。所以在 dfs 函数的开头加了一句记忆化操作。

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 110;
    vector<int> g[maxn];
    int n, m, cnt;
    bool ok[maxn][maxn];
    
    // 判断是否存在一条从x到u的路径
    void dfs(int x, int u) {
        if (ok[x][u]) return; // 不加这句话超时了6组数据,说明数据有问题,不能保证是DAG
        ok[x][u] = true;
        for (auto v : g[u])
            dfs(x, v);
    }
    
    // 判断每个点是否都可达x或x可达,如果是的话则x就是关键点
    bool check(int x) {
        for (int i = 1; i <= n; i ++)
            if (!ok[x][i] && !ok[i][x])
                return false;
        return true;
    }
    
    int main() {
        cin >> n >> m;
        while (m --) {
            int u, v;
            cin >> u >> v;
            g[u].push_back(v);
        }
        for (int i = 1; i <= n; i ++) dfs(i, i);
        for (int i = 1; i <= n; i ++)
            if (check(i))
                cnt ++;
        cout << cnt << endl;
        return 0;
    }
    
  • 相关阅读:
    my.cnf
    js日期和毫秒互转
    传送门
    js 十进制转十六进制
    关键字
    常见异常
    Map迭代
    Hibernate

    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flushhosts' 解决方法
  • 原文地址:https://www.cnblogs.com/quanjun/p/15571993.html
Copyright © 2011-2022 走看看