zoukankan      html  css  js  c++  java
  • 洛谷P4017 最大食物链计数

    拓扑排序板子题

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    //Mystery_Sky
    //
    #define maxn 1000010
    #define maxm 5000050
    #define mod 80112002
    struct Road{
        int next;
        int to;
    };
    Road road[maxn];
    int head[maxm], cnt;
    inline void add_edge(int u, int v) {
        road[++cnt].to = v;
        road[cnt].next = head[u];
        head[u] = cnt;
    }
    
    int ind[maxn], eat[maxn];
    int d[maxn];
    int n, m;
    queue <int> q;
    
    inline void topo() {
        for(int i = 1; i <= n; i++) {
            if(!ind[i]) {
                q.push(i);
                d[i]++;
            }
        }
        
        while (!q.empty()) {
            int now = q.front();
            q.pop();
            for(int i = head[now]; i; i = road[i].next) {
                int e = road[i].to;
                d[e] = (d[e] + d[now]) % mod;
                if(! --ind[e]) q.push(e);
            }
        }
    }
    
    int main() {
        scanf("%d%d", &n, &m);
        for(int i = 1; i <= m; i++) {
            int a, b;
            scanf("%d%d", &a, &b);
            add_edge(a, b);
            ind[b]++;
            eat[a]++;
        }
        topo();
        int ans = 0;
        for(int i = 1; i <= n; i++) {
            if(!eat[i]) ans = (ans + d[i]) % mod;
        }
        printf("%d
    ", ans);
        return 0;
    }
    唯愿,青春不辜负梦想,未来星辰闪耀
  • 相关阅读:
    Jupyter notebook 读取文件的问题
    机器学习-数据清洗和特征选择
    机器学习-逻辑回归
    Java教程
    13.并发编程
    redis 实现
    CyclicBarrier介绍
    Future模式衍生出来的更高级的应用
    并发编程 futuretask
    整理POST请求方式
  • 原文地址:https://www.cnblogs.com/Benjamin-cpp/p/10389335.html
Copyright © 2011-2022 走看看