• tyvj1202 数数食物链


    描述

    TsyD学习了生物的生态环境那一张后,老师留了一项作业,就是给一张食物网,求所有食物链的总数。(从最低营养级生物(它不能吃任何其他的生物)开始到最高营养级(它不能被任何其他生物吃) 叫做一条食物链)
    输入保证所有的生物之间都有直接或间接的生存关系

    输入格式

    第一行 N,M 分别表示有N(N<=50000)个生物,M(M<=100000)个吃的关系
    接下来M行 每行有两个值a,b 分别 表示b吃a (编号从1开始)

    输出格式

    食物链的总数 MOD 11129 的值

    测试样例1

    输入

    3 3 
    1 2 
    2 3 
    1 3

    输出

    2

    备注

    样例解释:
    两条食物链分别为 1->3
     1->2->3
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const int maxn = 100005,mod = 11129;
    vector<int> g[maxn];
    int n,m,f[maxn],topo[maxn],cnt,ans;
    bool vis[maxn],ind[maxn];
    void input(){
        scanf("%d%d",&n,&m);
        int a,b;
        for(int i = 1;i <= m;i++){
            scanf("%d%d",&a,&b);
            g[a].push_back(b);
            ind[b] = true;
        }
    }
    void topo_dfs(int x){
        vis[x] = true;
        for(int i = 0;i < g[x].size();i++){
            if(!vis[g[x][i]]) topo_dfs(g[x][i]);
        }
        topo[cnt--] = x;
    }
    void topo_sort(){
        cnt = n;
        for(int i = 1;i <= n;i++){
            if(!vis[i]) topo_dfs(i);
        }
    }
    void dfs(int x){
        if(!g[x].size()){
            f[x] = 1;
            return;
        }
        for(int i = 0;i < g[x].size();i++){
            if(!f[g[x][i]]) dfs(g[x][i]);
            f[x] = (f[x] + f[g[x][i]]) % mod;
        }
    }
    void dp(){
        for(int i = 1;i <= n;i++){
            if(!f[topo[i]]) dfs(topo[i]);
            if(!ind[topo[i]]) ans = (ans + f[topo[i]]) % mod;
        }
        cout<<ans;
    }
    int main(){
        input();
        topo_sort();
        dp();
        return 0;
    }
  • 相关阅读:
    mysql网文收录
    centos7编译安装memcached
    计算机网络网文
    操作系统网文
    redis网文
    【Leetcode】746. Min Cost Climbing Stairs
    【Leetcode】198. House Robber
    【Leetcode】121. Best Time to Buy and Sell Stock
    【Leetcode】1. Two Sum
    函数的参数 2018-3-27
  • 原文地址:https://www.cnblogs.com/hyfer/p/5754644.html
Copyright © 2020-2023  润新知