洛谷 P4017 最大食物链计数
洛谷 P4017 最大食物链计数
题目背景
你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。
题目描述
给你一个食物网,你要求出这个食物网中最大食物链的数量。
(这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。)
Delia非常急,所以你只有1秒的时间。
由于这个结果可能过大,你只需要输出总数模上80112002的结果。
输入格式
第一行,两个正整数n、m,表示生物种类n和吃与被吃的关系数m。
接下来m行,每行两个正整数,表示被吃的生物A和吃A的生物B。
输出格式
一行一个整数,为最大食物链数量模上80112002的结果。
输入输出样例
输入 #1复制
输出 #1复制
说明/提示
各测试点满足以下约定:

【补充说明】
数据中不会出现环,满足生物学的要求。(感谢@AKEE )
题解:
一道拓扑排序的好题。
前置知识是拓扑排序。如有不会的小伙伴请移步:
我个人认为拓扑排序本身并没有特别难以理解,但是应用在题目上却并不是那么容易。
首先我们发现这道题是一道图论题。(这个要是看不出来可真的GG了)
对于图论题,我们要好好分析题目大意,据此判断模板和算法。那么这道题为什么要用拓扑排序呢?
首先,我们要找最大食物链,最大食物链是什么呢?根据题目的描述,是最猛的那种生物不能被任何生物吃掉,最弱的生物不能吃任何生物。类比到图上,就是从一个入度为0的点,到一个出度为0的点。我们只需要找出所有这种数量即可。
用递推即可解决计数的问题:
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=5010;
const int maxm=5*1e5+10;
const int mod=80112002;
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int read()
{
int x=0,f=1;
char ch=nc();
while(ch<48){if(ch=='-')f=-1;ch=nc();}
while(ch>47) x=(((x<<2)+x)<<1)+ch-48,ch=nc();
return x*f;
}
int n,m;
int tot,head[maxn],nxt[maxm],to[maxm];
int chudu[maxn],rudu[maxn];
int f[maxn],ans;
queue<int> q;
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
int main()
{
n=read();m=read();
for(int i=1;i<=m;i++)
{
int a=read();
int b=read();
add(a,b);
rudu[b]++;
chudu[a]++;
}
for(int i=1;i<=n;i++)
if(rudu[i]==0)
f[i]=1,q.push(i);
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
f[y]=(f[y]+f[x])%mod;
rudu[y]--;
if(rudu[y]==0)
{
q.push(y);
if(chudu[y]==0)
ans=(ans+f[y])%mod;
}
}
}
printf("%d",ans);
return 0;
}
洛谷 P4017 最大食物链计数的更多相关文章
- 动态规划 洛谷P4017 最大食物链计数——图上动态规划 拓扑排序
洛谷P4017 最大食物链计数 这是洛谷一题普及/提高-的题目,也是我第一次做的一题 图上动态规划/拓扑排序 ,我认为这题是很好的学习拓扑排序的题目. 在这题中,我学到了几个名词,入度,出度,及没有环 ...
- 洛谷——P4017 最大食物链计数
P4017 最大食物链计数 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧 ...
- 洛谷 P4017 最大食物链计数 题解
P4017 最大食物链计数 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧 ...
- 洛谷 P4017 最大食物链计数 (拓扑排序,思维)
题意:有\(n\)个点,连\(m\)条边,求最多有多少条食物链(从头走到为有多少条路径). 题解:之前抽了点时间把拓扑排序补完了,这题其实就是一道拓扑排序的裸题.关于拓扑排序: 1.首先,我们用\ ...
- 洛谷P4017 最大食物链计数
拓扑排序板子题 #include <iostream> #include <cstdio> #include <cstring> #include <queu ...
- 洛谷P4017 最大食物链数量 dfs
老规矩,传送门 做题从头到尾的思路: 1. 这个题明显就是dfs数数量了,简单,邻接矩阵干他! TLE警告,8个点 额... 2. 老师说这玩意不能邻接矩阵?没事,还有邻接表,再来! 再次TLE 8个 ...
- 洛谷 P1596 [USACO10OCT]湖计数Lake Counting
题目链接 https://www.luogu.org/problemnew/show/P1596 题目描述 Due to recent rains, water has pooled in vario ...
- 洛谷P1144 最短路计数(SPFA)
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
- 洛谷 1144 最短路计数 bfs
洛谷1144 最短路计数 传送门 其实这道题目的正解应该是spfa里面加一些处理,,然而,,然而,,既然它是无权图,,那么就直接bfs了,用一个cnt记录一下每一个点的方案数,分几种情况讨论一下转移, ...
随机推荐
- DotNet Core中使用dapper
我们都知道,ORM全称是,Object Relationship Mapper,即,对象关系映射.也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架叫做dappe ...
- JS查找某个字符在字符串中出现的位置及次数
var str = 'fdhfgcsaedvcfhgfh'; var index = str.indexOf('f'); // 字符出现的位置 var num = 0; // 这个字符出现的次数 wh ...
- ABAP分享四 选择屏幕下拉菜单简单实现示例
PARAMETERS p_carri2 LIKE spfli-carrid AS LISTBOX VISIBLE LENGTH 20 ...
- [转]VB.NET DataTable Select Function
本文转自:https://www.dotnetperls.com/datatable-select-vbnet VB.NET DataTable Select Function This VB.NET ...
- C lang:Array and Pointer formal parameter
Test Xx_Formal parameter Formal parameter are local variable. It's private to the function. Ax_Array ...
- android sdk tools里找不到draw9patch.bat 如何制作.9.png 格式图片
1.什么是.9.png格式 .9.png格式的图片可以在安卓平台指定拉伸区域,防止图片失真,一般用作背景图. 2.前提 最近项目中要用到.9.png格式图片,想着这个简单使用draw9patch.ba ...
- 11.2 Data Guard Physical Standby Switchover Best Practices using SQL*Plus (Doc ID 1304939.1)
11.2 Data Guard Physical Standby Switchover Best Practices using SQL*Plus (Doc ID 1304939.1) APPLIES ...
- 2019-2020-1 20199305《Linux内核原理与分析》第九周作业
进程的切换和一般执行过程 (一)进程调度的时机 (1)关键问题 何为进程切换?就是进程调度时机到来时从就绪进程队列中能够挑选一个进程执行,占用CPU时间,那么就有两个关键问题:一是什么时间去挑选一个就 ...
- 云数据库MongoDB版清理oplog日志和compact命令详解
1.问题描述: 今天看到公司mongodb的oplog有点大,看到云数据库MongoDB版日志清理策略. MongoDB数据库在长期频繁地删除/写入数据或批量删除了大量数据,将产生很多物理空间碎片. ...
- 前端笔记之微信小程序(一)初识微信小程序&WXSS与CSS|WXML与HTML的差异&像素和DPR
一.小程序概述 2017 年 1 月 9 日小程序正式上线,腾讯开放了个人开发者开发小程序,小程序从此就开始火爆,这一年,小程序狂揽 4 亿用户.1.7 亿的日常活跃,上线 58 万个.这是一个巨大的 ...