zoukankan      html  css  js  c++  java
  • 图论

    大致题意:给你一个有向无环图,问从任意度数为0的节点出发到达节点n的最短路(边长为1)

    解法:
    首先看到是一个有向无环图,再看到选了课程A之后才能选课程B,第一反应是拓扑排序之后dfs,但是拓扑排序的结果不会唯一,因此工作量会很大,会T,之后看到题解之后发现倒着一遍bfs即可。
    Bfs过程中,当遍历到一个顶点的时候,如果这个结点没有出度,即没有节点与之相邻,便可以退出。
    容易WA的点在于初始时的深度应该为1而不是0.

    #include<cstdio>
    #include<queue>
    #include<vector>
    using namespace std;
    const int maxn = 200000+5;
    struct node {
        int deep, id;
        //node(int deep, int id) :deep(deep), id(id) {}
    };
    vector<int>g[maxn];
    queue<node>q;
    int visit[maxn];
    int m, n, k;
    
    int main() {
        scanf("%d%d%d", &n, &k, &m);
        int a, b;
        long long ans;
        for (int i = 0; i < m; i++) {
            scanf("%d%d", &a, &b);
            g[b].push_back(a);
        }
        //memset(visit, 0, sizeof(visit));
        node n ;
        n.id = k; n.deep = 1;
        q.push(n);
        visit[k] = 1;
        while (!q.empty()) {
            node now = q.front(); q.pop();
            int sz = g[now.id].size();
            if (sz == 0) { ans = now.deep; break; }
            node ne;
            ne.deep = now.deep + 1;
            for (int i = 0; i < sz; i++) {
                if (visit[g[now.id][i]] == 0) {
                    ne.id = g[now.id][i];
                    q.push(ne);
                    visit[g[now.id][i]] = 1;
                }
            }
        }
        printf("%lld
    ", ans);
        return 0;
    }
  • 相关阅读:
    Yii2的View中JS代码添加
    Yii2命名规则
    Yii2 Redis的使用
    win7下php5.6安装redis扩展
    Ubuntu安装cuda
    Ubuntu 安装显卡驱动
    TensorFlow 图片resize方法
    anaconda的kernel对jupyter可见
    cuda和显卡驱动版本
    jupyter修改根目录
  • 原文地址:https://www.cnblogs.com/romaLzhih/p/9489846.html
Copyright © 2011-2022 走看看