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

P4017 最大食物链计数

时间:2024-02-27 19:22:25浏览次数:30  
标签:pre 食物链 结点 5005 int sum cnt 计数 P4017

原题链接

题解

首先这题是一个有向无环图,如图,每个结点上方显示的是到达该节点的路径数,我们不难发现每个结点的路径数都由其入度结点的路径数之和,最终得出5结点的路径数。那么由此我们只需要求出每个无出度结点的路径数再相加即可。

 code

 

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
const int M=80112002;
int cnt=0;
int head[5005],Next[N],to[N],sum[5005],pre_sum[5005],que[5005];
void build(int x,int y){
    Next[++cnt]=head[x];
    head[x]=cnt;
    to[cnt]=y;
    sum[y]++;
}
int main(){
    int n,m,l=0,r=0;
    cin>>n>>m;
    for (int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        build(x,y);
    }
    for (int i=1;i<=n;i++){
        if (sum[i]==0){
            que[r++]=i;
            pre_sum[i]=1;
        }
    }
    int ans=0;
    while (l<r){
        int from=que[l++];
        if (head[from]==0) ans=(ans+pre_sum[from])%M;  //出度为零,说明要进行累加了
        for (int i=head[from];i>0;i=Next[i]){
            if (--sum[to[i]]==0) que[r++]=to[i];
            pre_sum[to[i]]=(pre_sum[to[i]]+pre_sum[from])%M;  //同余原理
        }
    }
    cout<<ans<<endl;
    return 0;
} 

 

标签:pre,食物链,结点,5005,int,sum,cnt,计数,P4017
From: https://www.cnblogs.com/purple123/p/18037636

相关文章

  • FPGA之计数器简单运用(看注释
    先写源文件counter.v////////////////////////////////////////////////////////////////////////////////////ModuleName:counter//板子晶振为50mhz,就是50106hz,周期为20*10(-9)s,s/ms/us/ns/ps,相邻两单位前者是后者的1000倍//所以为20ns,///////////////////////////////......
  • 【计数】序列转等概率环问题
    问题描述有\(m\)个人要坐\(n\)个位置,每个人的选择方式如下。首先选择一个座位,选定一个方向(向左/右),然后找到从这个座位开始这个方向的第一个空座位。如果这时走到尽头都选不到座位,就声称这个人失败了。一个完美的方案当且仅当所有人都不失败,求完美方案数。\(1\leqm\leq......
  • 元宵节家里煮了多少汤圆?合合信息扫描全能王“拍照计数”一键盘点
    元宵将至,新春节庆氛围浓厚依旧。厨房里,餐桌上,一碗碗热气腾腾的汤圆、皮薄馅足的饺子,织就了年节温暖幸福的画面。近期,合合信息旗下扫描全能王APP“拍照计数”功能获得广大用户的关注。该功能基于图像AI技术,可以对图片中用户指定的目标物体进行统计,快速“点出”出图片中的物体数量......
  • 三元环计数
    三元环计数首先要对所有的无向边进行定向,对于任何一条边,从度数大的点连向度数小的点,如果度数相同,从编号小的点连向编号大的点此时这张图是一个有向无环图之后枚举每一个点u,然后将u的所有相邻的点都标记上“被u访问了”,然后再枚举u的相邻的点v,然后再枚举v的相邻的点w,如果w存在“......
  • .计数类dp
    整数划分https://www.acwing.com/problem/content/description/902/#include<iostream>#include<algorithm>usingnamespacestd;constintN=1010,mod=1e9+7;intf[N];intn;intmain(){cin>>n;f[0]=1;for(inti=1;i<=n;i+......
  • 基本计数原理
    加法原理解决一件事情,有k类方法,第i类方法有a[i]种选择。那么总方案数=a[1]+a[2]+....+a[k]乘法原理解决一件事情,有k个步骤,第i个步骤有a[i]种选择。那么总方案数=a[1]*a[2]....*a[k]排列组合排列:将n个元素选取k个出来构成一个排列,总方案数$A_{n}^{k}$=\(\frac{n!}{(n-k)......
  • 计数选讲tzc
    ARC154EReverseandInversion要长脑子了。首先先尝试拆一拆贡献。对原来的式子进行一定的化简,可以得到:\[\sum\limits_{i}i(\sum\limits_{i>j}[P_j>P_i]-\sum\limits_{i<j}[P_i>P_j])\\=\sum\limits_{i}i(i-P_i)\]因此我们只需要求出每个\(P_i\)被换到哪里即可。注意到初......
  • 计数交换
    详细阐述一下蓝书的做法首先,我们创造\(n\)个点,每个点有一个权值\(p_i\),也有一个编号蓝书的连边就是对每一个点,从这个点出发连一条有向边到编号为这个点权值的点比如书上举的那个例子,编号分别为\(1,2,3,4,5,6\),权值分别为\(2,4,6,1,5,3\)这样这个图肯定是由若干个环组成的然后......
  • 区间满足条件的子区间计数
    区间满足条件的子区间计数一般是扫描线,可能会有线段树维护历史版本信息。CF526FPuddingMonsters题意:给定一个\(n\timesn\)的棋盘,其中有\(n\)个棋子,每行每列恰好有一个棋子。对于所有的\(1\leqk\leqn\),求有多少个\(k\timesk\)的子棋盘中恰好有\(k\)个棋子。......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......