首页 > 其他分享 >P4017 最大食物链计数

P4017 最大食物链计数

时间:2023-08-11 09:02:38浏览次数:47  
标签:食物链 idx int 出度 计数 P4017

\(P4017\) 最大食物链计数

最大食物链数量;最大指的是需要从一个入度为零的点开始到一个出度为零的点,这是一个完整的食物链,问我们给出的食物网中,食物链的数量
① 本题中,不仅需要 记录一下入度 , 还要 记录一下出度,这是因为我们要计算食物链的数量,食物链的最后一个结点,就是出度为零的点
② 食物链的数量,就是一个类似于 数字三角形 求值的\(dp\)问题了

#include <bits/stdc++.h>
using namespace std;

const int N = 5010, M = 500010;
const int INF = 0x3f3f3f3f, MOD = 80112002;

int in[N], out[N], f[N];
int n, m;

//链式前向星
int e[M], h[N], idx, w[M], ne[M];
void add(int a, int b, int c = 0) {
    e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx++;
}

void topsort() {
    queue<int> q;

    for (int i = 1; i <= n; i++)
        if (!in[i]) {
            q.push(i);
            f[i] = 1;
        }

    while (q.size()) {
        int u = q.front();
        q.pop();
        for (int i = h[u]; ~i; i = ne[i]) {
            int j = e[i];
            in[j]--;
            f[j] = (f[j] + f[u]) % MOD;
            if (in[j] == 0) q.push(j);
        }
    }
}

int main() {
    scanf("%d%d", &n, &m);

    memset(h, -1, sizeof h);

    while (m--) {
        int a, b;
        scanf("%d%d", &a, &b);
        add(a, b);
        in[b]++, out[a]++;
    }

    topsort();

    int res = 0;

    for (int i = 1; i <= n; i++)
        if (!out[i]) res = (res + f[i]) % MOD;

    printf("%d", res);
    return 0;
}

标签:食物链,idx,int,出度,计数,P4017
From: https://www.cnblogs.com/littlehb/p/17622127.html

相关文章

  • 【树论,计数】Centroid Probabilities
    生生动动贺题贺一遍!考虑先求出\(f_x\)表示\(x\)子树大小\(\leq\frac{n+1}{2}\)的方案数。最后再容斥掉\(x+1\ton\)的方案即可。\[\sum^{n-x+1}_{j=\frac{n+1}{2}}\binom{n-i}{j-1}(j-1)!(n-j-1)!(i-1)\]即考虑选出子树,生成子树内和子树......
  • go-zero 是如何实现计数器限流的?
    原文链接:如何实现计数器限流?上一篇文章go-zero是如何做路由管理的?介绍了路由管理,这篇文章来说说限流,主要介绍计数器限流算法,具体的代码实现,我们还是来分析微服务框架go-zero的源码。在微服务架构中,一个服务可能需要频繁地与其他服务交互,而过多的请求可能导致性能下降或系......
  • DataFrame 计数value_counts 后转成df
    importpandasaspd#创建示例DataFramedata={'Category':['A','B','A','C','A','B','C','A','B']}df=pd.DataFrame(data)#使用value_counts()方法对&......
  • DataFrame 对某列求和、平均值、计数、最大值、最小值
    importpandasaspd#创建示例DataFramedata={'A':[1,2,3,4,5],'B':[10,20,30,40,50]}df=pd.DataFrame(data)#对列'B'求和column_sum=df['B'].sum()print("SumofcolumnB:",column_sum......
  • 「JSOI2008」最小生成树计数 题解报告
    简要题意现在给出了一个简单无向加权图。你希望知道这个图中有多少个不同的最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。输出方案数对\(31011\)取模。SOLUTION这个题求最小生成树的方案所以我们从最小生成树入手(根据kruskal的思路)我们......
  • 为什么要推进“电子凭证会计数据标准化”?
    电子凭证会计数据标准化是财务管理领域的一场革命,它将对国家、企业和社会的各个方面产生深远的影响。随着数字化和信息化技术的不断发展,电子凭证会计数据标准化已经成为财务管理工作的必要趋势。作为利国利民的重要事务,电子凭证会计数据标准化对国家、企业和社会的意义表现在以下六......
  • Mitsubishi 三菱FXPLC入门之定时器和计数器
    “小时候总想着,自己要是可以控制时间就好了,给时间按下暂停键,然后把班里的那个死对头打一顿哈哈哈哈哈嗝,做梦呢。虽然我不可以控制时间,但是我可以通过定时器控制PLC的程序执行呀,这也是从另一方面实现我控制时间的的梦想了,激动!PLC中,定时器和计数器是两个非常主要的编程元件......
  • Matlab从移动设备获取加速度数据对步数进行计数
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • Mysql按照固定时间间隔统计数据
    SELECTCODE,TM,SUM(DRP)FROMxxTableWHERE CODE='409K0044'and`TM`>='2023-01-0108:00:00' ANDMOD(unix_timestamp(`TM`)-unix_timestamp('2023-01-0108:00:00'),24*60*60)BETWEEN0 AND1 GROUPBYCODE,TM DRP是需......
  • 树上计数2
    [树上计数2](2534.树上计数2-AcWing题库)我们先考虑一般的问题,即序列上的问题。发现这题是HH的项链。然后我们考虑树上怎么转换成序列上。我们使用欧拉序(对于每个点,在进入和离开时各记录一次,类比dfs序)。对于点\(u\),令\(fi_u,ls_u\)表示进入/出去的时间戳。如图(样例)......